原文連結:https://blog.csdn.net/ljy950914/article/details/79852610
iBatis就是myBatis前身,他們隻有有很多地方很相似,但是在sqlMap裡面已經有很多地方變動了。下面就讓我看好好地學習一下吧,同時對比一下他們的不同點。
但是這兩種架構為什麼這麼多人使用呢?因為他友善使用啊,它最大的特性就是動态SQL語句,可以随意的拼接sql語句啊,簡直不要太人性化。
事先聲明,這篇文章現在隻談使用方法,不談配置過程。
首先是sql。例如:
<sql id="sql_delete">
delete
</sql>
這個就相當定義了一個sql語句的片段,然後就可以友善的複用了啊,免得每次都要寫重複的代碼,麻煩,備援。
有了定義,那麼就一定要有調用了啊。
<include refid="sql_delete"/>
這個就是調用的,可以友善的把他放到你的增删改查語句的任意位置。完美。
同理,myBatis也是這樣的。
然後就是增删改查了,這個兩個也是一緻的。都是使用的insert delete update select标簽。但是iBatis可以使用statement,它是通用的。
但是裡面關鍵字用到的就不一樣了,比如:
iBatis的傳入參數關鍵字是:parameterClass,而MyBatis是可以不寫的,也可以用parameterType;
iBatis的傳出參數關鍵字是:resultClass,而MyBatis是resultMap。
iBatis: <select id="selectDeviceByWhere" parameterClass="Map" resultClass="BaseResultMap"> </select>
MyBatis:<select id="selectDeviceByWhere" parameterType="Map" resultMap="BaseResultMap"> </select>
接下來是接受參數:IBatis是使用# #和$ $來接受參數的。使用方法等同于MyBatis;# #=#{ },$ $=${ }.
然後就是判斷語句了,這個也是非常常用和重要的地方。
對于MyBatis的很簡單,隻要在where 或者if 的标簽裡面添加test=""就可以了,裡面寫判斷條件了。
但是IBatis的就麻煩了許多了,它将每個都方法都進行了封裝。
例如:
isNull:判斷property字段是否是null
<isNull prepend="and" property="id"> </isNull>
至于prepend就是代表着添加在動态語句前面。
property就是被比較的屬性。
isNull:判斷property字段是否不是null
isEqual相當于equals,判斷狀态值。
<isEqual property="state" compareValue="0"> </isEqual>
或
<isEqual property="state" compareProperty="nextState"> </isEqual>
isEmpty判斷參數是否為Null或者空,滿足其中一個條件則其true。
isNotEmpty相反,當參數既不為Null也不為空是其為true。
這些就是非常常用的條件元素的屬性了。
下面再來看看循環的:
Iterate:這屬性周遊整個集合,并為 List 集合中的元素重複元素體的内容。
Iterate 的屬性:
prepend - 可被覆寫的 SQL 語句組成部分,添加在語句的前面(可選)
property - 類型為 java.util.List 的用于周遊的元素(必選)
open - 整個周遊内容體開始的字元串,用于定義括号(可選)
close - 整個周遊内容體結束的字元串,用于定義括号(可選)
conjunction - 每次周遊内容之間的字元串,用于定義 AND 或 OR(可選)
<iterate> 周遊類型為 java.util.List的元素。
例子:
<iterate prepend="AND" property="userNameList" open="(" close=")" conjunction="OR">
username=#userNameList[]#
</iterate>
MyBatis使用的是ForEach方法。他可以周遊List,[](array),Map三種元素。
foreach屬性:
item - 循環體中的具體對象(必選)
collection - 要做foreach的對象(必選)
open - 整個周遊内容體開始的字元串,用于定義括号(可選)
close - 整個周遊内容體結束的字元串,用于定義括号(可選)
separator - 元素之間的分隔符(可選)
index - 在list和數組中,index是元素的序号,在map中,index是元素的key(可選)
例子:
<foreach item="item" collection="list" separator="," open="(" close=")" index="">
#{item.id}
</foreach>
最後的還有一個非常重要的标簽沒有介紹。dynamic
dynamic有一個非常重要的作用,那就是去除它的代碼塊中的第一個prepend裡面的字元。
然後他也有自己的prepend标簽,作用也是在語句前面添加修飾符,比如where。
而在MyBatis裡是<where></where>.