成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iBATIS.net常用的查詢方式淺析

開發 后端
iBATIS.net常用的查詢方式有哪些呢?本文就向你介紹iBATIS.net常用的查詢方式相關的信息。

在項目開發過程中,查詢占了很大的一個比重,一個框架的好壞也很多程度上取決于查詢的靈活性和效率。

在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,MaximumAllowed等表示的是Hashtable里的key值,用$$包含起來。

并且查詢時可以根據條件是否為空動態拼寫sql語句

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 的提醒)

比如現在有兩張表Account和Degree,使用Account_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="no_email@provided.com"/﹥  
  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常用的查詢方式。

【編輯推薦】

  1. Spring iBATIS整合實例演示
  2. iBATIS Spring Struts2整合實例淺析
  3. iBATIS.net應用之下載、編譯、運行NPetShop
  4. IBATIS.net中兩大常用的DAO淺談
  5. iBATIS.net數據庫緩存模式淺析
責任編輯:仲衡 來源: cnblogs
相關推薦

2009-07-22 09:07:01

iBATIS.NET

2009-07-20 13:22:47

iBATIS.Net日

2009-07-21 13:50:00

iBATIS.NET調

2009-07-20 14:56:18

iBATIS.NET動態選擇DAO

2009-07-21 15:21:59

iBATIS.NET多

2009-07-20 09:51:19

iBATIS.net數據庫緩存

2009-07-20 13:47:08

iBATIS.NET字

2009-07-20 15:14:44

iBATIS.NET連

2009-07-21 14:15:00

iBATIS.NET多

2009-07-21 16:30:15

iBATIS.NET與單元測試

2009-07-16 13:50:31

ibatisResultMap

2009-07-20 09:27:42

IBATIS.netDAO

2009-07-22 14:28:52

iBATIS.NET配

2009-07-21 17:06:35

iBATIS.NET執

2009-07-20 15:27:22

Castle.DynaiBATIS.NET

2009-07-22 14:11:09

配置ibatis.neiBatis.net配

2009-07-21 16:17:28

iBATIS.NET

2009-07-22 13:04:41

iBATIS動態查詢

2011-03-15 13:30:27

IBatis.netMySQL

2009-07-17 17:57:20

NPetShop iBATIS.Net
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲天堂一区二区 | 欧美性成人 | 青青草原综合久久大伊人精品 | 亚洲国产免费 | 久久一区精品 | www.日韩免费 | 国产在线视频一区二区董小宛性色 | 亚洲精选一区二区 | 亚洲国产成人久久久 | 一区二区三区四区免费视频 | 18性欧美| 久久国产综合 | 91视视频在线观看入口直接观看 | 国产欧美在线视频 | 一区二区三区视频在线 | 精品久久久久久久久久久久久久 | 91成人在线| 国产福利久久 | 色橹橹欧美在线观看视频高清 | 黄色一级免费 | 99免费精品视频 | 国产免费一区二区 | 草在线| 欧美亚洲国产一区二区三区 | 精品日本久久久久久久久久 | 国产精品久久久久久一区二区三区 | 欧美涩涩网| 国产日韩一区二区三区 | 欧美一区二区 | 精品欧美一区二区三区久久久 | 亚洲国产精久久久久久久 | 亚洲精品中文字幕 | 日韩欧美在线一区二区 | 青青久久 | 国产精品亚洲精品日韩已方 | 在线免费亚洲视频 | 成人福利网 | 久久久2o19精品 | 国产欧美精品 | 欧美成人一区二区三区片免费 | av永久免费 |