1. 程式人生 > >mybatis和ibatis的比較

mybatis和ibatis的比較

前些時候一直在用ibatis做專案覺得用起來還是很舒服的至少來說用起來靈活不想hibernate那麼死還經常出一些搞得人噁心的問題而且開發包還很多,hibernate我覺得還垃圾一點不好用。心血來潮在網上看了一下其實自己早就out了,人家ibatis都到3點幾了而且還改了名字叫做mybatis。這個版本和之前的ibatis已經出現了很多的差別。下面是我自己學習的時候總結的。

1.以前用的parameterClass在mybatis中已經永不了了,mybatis裡應該使用parameterType。另外resultMap裡面也不能繼續使用了改成了type

2.dynamic標籤不能使用了,下面的配置在mybatis裡是錯的

<sql id="sqlwhere">	
	<dynamic>
		<isGreaterThan prepend="and" property="FPARENTID" compareValue="-1">
			A.FPARENTID = #FPARENTID#
		</isGreaterThan>
		<isNotEmpty prepend="and" property="LOGINTOPIMAGE">
			A.LOGINTOPIMAGE like #LOGINTOPIMAGE#
		</isNotEmpty>
		<isGreaterThan prepend="and" property="FID" compareValue="-1">
			A.FID = #FID#
		</isGreaterThan>
		<isNotEmpty prepend="and" property="FNAME">
			A.FNAME like #FNAME#
		</isNotEmpty>
		<isNotEmpty prepend="and" property="LOGINMIDDLEIMAGE">
			A.LOGINMIDDLEIMAGE like #LOGINMIDDLEIMAGE#
		</isNotEmpty>
		<isNotEmpty prepend="and" property="VERSIONNUMBER">
			A.VERSIONNUMBER like #VERSIONNUMBER#
		</isNotEmpty>
		<isNotEmpty prepend="and" property="MAJORTITLE">
			A.MAJORTITLE like #MAJORTITLE#
		</isNotEmpty>
		<isNotEmpty prepend="and" property="LOGINTITLE">
			A.LOGINTITLE like #LOGINTITLE#
		</isNotEmpty>
		<isNotEmpty prepend="and" property="MAJORMIDDLEIMAGE">
			A.MAJORMIDDLEIMAGE like #MAJORMIDDLEIMAGE#
		</isNotEmpty>
		<isNotEmpty prepend="and" property="LOGINBOTTOMIMAGE">
			A.LOGINBOTTOMIMAGE like #LOGINBOTTOMIMAGE#
		</isNotEmpty>
		<isNotEmpty prepend="and" property="MAJORTOPIMAGE">
			A.MAJORTOPIMAGE like #MAJORTOPIMAGE#
		</isNotEmpty>
		<isNotEmpty prepend="and" property="LOGO">
			A.LOGO like #LOGO#
		</isNotEmpty>
		<isNotEmpty prepend="and" property="LOGO">
			A.ADDRESS like #ADDRESS#
		</isNotEmpty>
		<isNotEmpty prepend="and" property="LOGO">
			A.FAX like #FAX#
		</isNotEmpty>
		<isNotEmpty prepend="and" property="LOGO">
			A.PHONE like #PHONE#
		</isNotEmpty>
		<isNotEmpty prepend="and" property="LOGO">
			A.ZIP like #ZIP#
		</isNotEmpty>
		<isNotEmpty prepend="and" property="LOGO">
			A.EMAIL like #EMAIL#
		</isNotEmpty>
		<isNotEmpty prepend="and" property="containIds">
			A.FID NOT IN ($containIds$)
		</isNotEmpty>
	</dynamic>
</sql>


3.資料型別的宣告和ibatis有了很大的差別,ibatis可以像下面這樣寫

 insert into M_HEALTHSPECIALYTYPE(FCODE,FCHARGE,FTYPECONTENT,FID,FMARK) 
 values (#FCODE:VARCHAR2#,#FCHARGE:VARCHAR2#,#FTYPECONTENT:VARCHAR2#,#FID#,#FMARK:VARCHAR2#)


在mybatis的話一般是這樣弄的

insert into M_HEALTHSPECIALYTYPE(FCODE,FCHARGE,FTYPECONTENT,FID,FMARK) 
     values (#{FCODE,jdbcType=VARCHAR},#{FCHARGE,jdbcType=VARCHAR},#{FTYPECONTENT,jdbcType=VARCHAR},#{FID},#{FMARK,jdbcType=VARCHAR})  


4.mybatis現在已經沒有SqlMapClient了,使用的則是SqlSession.在原來的基礎上加了像selectMap,selectList,selectOne這樣的方法,使用更方便了

5.加了一個叫對映器的新東西,只需要寫出介面而不需要實現類就能夠操作資料如

import java.util.List;

import org.lxh.vo.HealthspecialytypeInfo;

public interface HealthMapper {
  public List<HealthspecialytypeInfo> getRecordByList(HealthspecialytypeInfo info);
}


在對映檔案裡要記得namespace寫成介面的類全名,sql語句的id寫成接口裡的方法名就可以了

<select id="getRecordByList" parameterType="org.lxh.vo.HealthspecialytypeInfo" resultMap="resultMap"> 
		select * from M_HEALTHSPECIALYTYPE where FCODE in
		<foreach item="item" index="index" collection="list"
	      open="(" separator="," close=")">
	      #{item}
	    </foreach>
	</select>


呼叫的時候就像下面

HealthMapper m=ses.getMapper(HealthMapper.class);
List<HealthspecialytypeInfo> record=m.getRecordByList(h);


就這樣就可以直接進行資料的操作了,的確智慧了很多

5.需要注意的是spring3.0一下的版本並不支援mybatis,下面是官方文件的描述

從spring3之後mybatis已經可以和spring整合了,最值得高興的是mybatis網站也提供了整合的使用者指導,寫的很具體直接就可以拿來用。還有一些特色的功能如直接批量插入資料,hibernate還是那死樣子,在這裡力挺mybatis。更多的東西大家去看開發文件,我就不多說了。吐舌頭

我自己也寫了個整合的小例子,大家去我的資源裡下載就好了。