mybatis相對於ibatis的優勢
2010年,apache的Ibatis框架停止更新,並移交給了google團隊,同時更名為MyBatis。從2010年後Ibatis在沒更新過,徹底變成了一個孤兒框架。一個沒人維護的框架註定被mybatis拍在沙灘上。
1. 入參無需用物件封裝(或者map封裝),使用@Param註解
當Ibatis需要接收超過一個引數時,則需要將多個引數封裝成物件,這個時候會產生很多Domain查詢類。還有很多同學偷懶,寫用hashmap傳參,這種方式會徹底喪失程式碼的優雅性,同時hashmap方式很容易造成bug
如果你的對映器的方法需要多個引數, 這個註解可以被應用於對映器的方法 引數來給每個引數一個名字。否則,多 引數將會以它們的順序位置來被命名 (不包括任何 RowBounds 引數) 比如。 #{param1} , #{param2} 等 , 這 是 默 認 的 。 使 用 @Param(“person”),引數應該被命名為 #{person}。
示例:
List<BizDO> queryByDomainCodeAndKey(@Param("bizDomainCode") String bizDomainCode,
@Param("status") Integer status,
@Param("key") String key,
@Param("startIndex" ) Integer startIndex,
@Param("pageSize") Integer pageSize);
2. 無需寫ResultMap。開啟mapUnderscoreToCamelCase配置即可
在ibatis的sql檔案中,所有的跟資料庫表對應的DataObject類都需要寫冗長的對映配置。當資料庫表增加了欄位時要對這段配置進行同步修改。下劃線自動對映到駝峰規則徹底摒棄了這個多餘的配置。這個特性同樣極大的提高了生產力
是否開啟自動駝峰命名規則(camel case)對映,即從經典資料庫列名 A_COLUMN 到經典 Java 屬性名 aColumn 的類似對映
3. 無需寫的DAO層實現類
在Ibatis中,每個sql的xml檔案都有一個namespace,而要呼叫檔案中的sql時需要用namespace + sql id 對映到具體的sql。這樣程式碼裡徒增很多字串常量。
Mybatis實現了DAO介面與xml對映檔案的繫結,介面的方法名自動對映到sql的id。不再需要程式碼裡拼接sqlid。
4. 支援Ognl表示式
在Mybatis的If表示式裡可以使用Ognl表示式,相對於Ibatis只能使用固定的標籤,這個特性太強大了。你可以使用任何第三方框架的方法進行判斷。
缺點也在於,Ognl表示式太靈活,不容易駕馭。有幾次印象深刻的mybatis的問題,都是ognl表示式造成的,排查了很久。
<update id="update" parameterType="BizModelDO">
UPDATE table_name
<set>
<if test="[email protected]@isEmpty(modelName)">model_name= #{modelName},</if>
<if test="[email protected]@isEmpty(parentCode)">parent_code = #{parentCode},</if>
<if test="height != null">height = #{height},</if>
<if test="number != null">number = #{number},</if>
</set>
WHERE model_code = #{modelCode}
</update>
5.pagehelper,sorthelper等外掛的支援
在Ibatis下,每個分頁查詢都需要寫兩條SQL,一條查詢sql,還有一條統計總數的sql,兩個sql幾乎一模一樣。
在MyBatis下,配置下pagehelper外掛,就只需要寫一條查詢sql。統計的sql會由pagehelper外掛來完成。同樣提高了生產效率。
pagehelper github地址
沒有理由再選擇Ibatis作為ORM框架,擁抱MyBatis吧。