天天看點

iBatis與Mybatis的差別對比

原文連結: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>.