iBATIS.net에서 자주 사용하는 검색 방식에 대한 간단한 분석

8637 단어 ibatis
프로젝트 개발 과정에서 조회는 매우 큰 비중을 차지하고 하나의 구조의 좋고 나쁨도 어느 정도에 조회의 유연성과 효율에 달려 있다.
IBAtis.Net에서 편리한데이터베이스 조회 방식을 제공합니다.
Dao 코드 섹션에는 주로 두 가지 방법이 있습니다.
1. 조회 결과는 하나의 대상이다.

 
   
  1. ISqlMapper sqlMap = sqlMapDaoSession.SqlMap;  
  2.  
  3.  return (Account) sqlMap.QueryForObject("GetAccountViaColumnName", accountID); 

2. 조회 결과는 하나의 목록이다.

 
   
  1. ISqlMapper sqlMap = sqlMapDaoSession.SqlMap;  
  2.  
  3. return (ArrayList)sqlMap.QueryForList("GetAccountAsHashtableResultClass", 1); 

이 두 가지 방법은 동시에 범용을 위한 중재 방법을 제공했다.이 두 방법의 첫 번째 파라미터는 프로파일의select id에 대응하고 두 번째 파라미터는 조회에 전송되는 조건을 나타낸다
구성 파일의 쓰기 방법:
IBAtis.Net에서는 자주 사용하는 몇 가지 방법을 보여 주는 쿼리 구성에 대한 쓰기 방법을 제공합니다.
1. 한 장의 표의 모든 데이터를 얻는다

 
   
  1. ﹤select id="GetAllAccountsAsHashMapViaResultMap" 
  2.                 resultMap="account-hashtable-result"﹥  
  3.     select *  
  4.     from Accounts  
  5.     order by Account_ID  
  6. ﹤/select﹥ 

이것은 가장 간단한 방법입니다. 여기서 resultMap은 질의 결과를 반환하는 형식으로 별도로 설정해야 합니다.

 
   
  1. ﹤resultMap id="account-hashtable-result" class="Hashtable"﹥  
  2.     ﹤result property="Id"           column="Account_ID"/﹥  
  3.     ﹤result property="FirstName"    column="Account_FirstName"/﹥  
  4.     ﹤result property="LastName"     column="Account_LastName"/﹥  
  5.     ﹤result property="EmailAddress" column="Account_Email"/﹥  
  6. ﹤/resultMap﹥ 

표시: 결과의 모든 기록은 하나의 Hashtable로 비추고, 이 Hashtable에는 네 개의 Key (Id,FirstName...) 가 포함되어 있습니다.
2. 조건에 따라 조회(간단한 방법):

 
   
  1. ﹤select id="GetAccountViaColumnIndex" 
  2.         parameterClass="int" 
  3.         resultMap="indexed-account-result"﹥  
  4.     select 
  5.     Account_ID,  
  6.     Account_FirstName,  
  7.     Account_LastName,  
  8.     Account_Email  
  9.     from Accounts  
  10.     where Account_ID = #value#  
  11. ﹤/select﹥ 

하나의 조건만 있습니다. 들어오는 매개 변수의 유형은 int형입니다. sql를 맞춤법으로 쓸 때 #value#을 사용하면 됩니다
3. 조건에 따라 조회(비교적 복잡한 방식):

 
   
  1. ﹤select id="GetAccountsDynamic" resultMap="account-result" parameterClass="Hashtable" ﹥  
  2.     select top $MaximumAllowed$ * from Accounts  
  3.     ﹤dynamic prepend="where"﹥  
  4.             ﹤isParameterPresent﹥  
  5.             ﹤isNotEmpty prepend="and" property="FirstName" ﹥  
  6.                     Account_FirstName LIKE '%$FirstName$%' 
  7.             ﹤/isNotEmpty﹥  
  8.             ﹤isNotEmpty prepend="and" property="LastName" ﹥  
  9.                     Account_LastName LIKE '%$LastName$%' 
  10.             ﹤/isNotEmpty﹥  
  11.             ﹤isNotEmpty prepend="and" property="EmailAddress"  ﹥  
  12.                     Account_Email LIKE '%$EmailAddress$%' 
  13.             ﹤/isNotEmpty﹥  
  14.             ﹤/isParameterPresent﹥  
  15.         ﹤/dynamic﹥  
  16.         order by Account_LastName  
  17. ﹤/select﹥ 

입력 매개 변수는 Hashtable입니다. Maximum Allowed 등은 Hashtable의 키 값을 표시하고 $$로 포함합니다.
또한 검색 시 조건에 따라 빈 동적 맞춤법 검사 ql 문장을 사용할 수 있습니다
PS: 매개 변수를 입력하면 Account 클래스를 사용할 수 있습니다. 해당 키는 클래스의 속성 이름과 일치해야 합니다(대소문자도 마찬가지).
4. 멀티 테이블 조회
다중 테이블 조회 시 매개 변수를 반환하는 방법은 세 가지가 있는데 하나는 새 클래스이고 이 클래스에는 여러 테이블의 모든 속성이 포함되어 있으며 또 하나는 Hastable로 직접 반환하는 것입니다.

 
   
  1.   ﹤select id="GetAccountAsHashtableResultClass" 
  2. sultClass="HashMap"﹥  
  3.       select 
  4.       a.*,b.*  
  5.       from a,b  
  6.       where a.Account_ID = b.Account_ID          
  7. ﹤/select﹥ 

PS: 여기의 HashMap은 실제로는 Hashtable입니다.
세 번째 방법은 IBAtis의 복잡한 속성을 사용하는 것이다(Anders Cui의 알림에 감사합니다)
예를 들어 현재 두 장의 시계 어카운트와 Degree가 있는데 어카운트 를 사용합니다ID 연결은 다음과 같이 수정되어야 합니다.
1. Account 솔리드 클래스를 수정하고 속성을 추가합니다.

 
   
  1. private Degree _degree;  
  2. public Degree Degree  
  3. {  
  4.     get  
  5.     {  
  6.         return _degree;  
  7.     }  
  8.     set  
  9.     {  
  10.         _degree = value;  
  11.     }  

이렇게 하면 1:1의 관계이고 Ilist DegreeList의 속성도 추가할 수 있습니다. 이렇게 하면 조회의 결과는 1:n의 관계입니다.
2. 프로필을 수정한다.
ResultMaps 섹션에 추가하려면:

 
   
  1. ﹤resultMap id="comresult"  class="Account" ﹥  
  2.   ﹤result property="Id"           column="Account_ID"/﹥  
  3.   ﹤result property="FirstName"    column="Account_FirstName"/﹥  
  4.   ﹤result property="LastName"     column="Account_LastName"/﹥  
  5.   ﹤result property="EmailAddress" column="Account_Email" nullValue="[email protected]"/﹥  
  6.   ﹤result property="Degree" column="Account_ID=Account_ID"  select="degreeretrive" /﹥  
  7. ﹤/resultMap﹥ 

Degree 속성에 대해lazyLoad=true 지연 로드를 추가하여 성능을 최적화할 수 있다(즉, 시작할 때 실제 조회 데이터베이스가 없고 속성Degree를 사용할 때 해당하는 데이터를 실제적으로 조회할 수 있다)
statements 섹션에 가입하려면 다음과 같이 하십시오.

 
   
  1. ﹤statement id="degreeretrive" 
  2.   parameterClass="Hashtable" 
  3.   resultClass="Degree"﹥  
  4.   select *  
  5.   from Degree  
  6.   where Account_id = #Account_ID#  
  7. ﹤/statement﹥  
  8.  
  9. ﹤select id="GetComTables" 
  10.   resultMap="comresult"﹥  
  11.   select *  
  12.   from Accounts  
  13.   order by Account_ID  
  14. ﹤/select﹥ 

이렇게 하면 OO와 일치하는 결과를 정확하게 조회할 수 있지만 두 가지 작은 문제가 있다.
1. 번거롭고 융통성이 부족하다
2. 성능에 영향을 받는다.
이런 방식은 사실 Hibernet과 비교적 유사하다. 검색할 때 먼저 실행한다

 
   
  1. select *        from Accounts        order by Account_ID 

그리고 이 문장의 결과에 따라 예를 들어 100개의 기록이 있다면 100번 이하의 문장을 집행해야 한다.

 
   
  1. select *        from Degree        where Account_id =  @param0 

입출력 정보:
위에서 볼 수 있는 입력은 다음과 같습니다:parameterClass와parameterMap, 출력할 때는:resultClass와resultMap을 사용할 수 있습니다
resultMap과parameterMap에 대해서는 따로 설정해야 합니다(위 참조).
parameterClass와resultClass의 경우 C# 고유 유형이라면 직접 사용할 수 있으며, 사용자 정의 클래스라면 SqlMap.config에서 먼저 다음과 같이 설명합니다.

 
   
  1. ﹤alias﹥  
  2.     ﹤typeAlias alias="Account" type="GSpring.Domain.Account"/﹥  
  3. ﹤/alias﹥ 

iBATIS.net에서 자주 사용하는 조회 방식은 여기까지 소개합니다. 소개를 통해 iBATIS를 알 수 있기를 바랍니다.net에서 자주 사용하는 검색 방식입니다.

좋은 웹페이지 즐겨찾기