读书人

mybatis跟ibatis的比较

发布时间: 2013-01-22 10:23:54 作者: rapoo

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,下面是官方文档的描述

mybatis跟ibatis的比较

从spring3之后mybatis已经可以和spring整合了,最值得高兴的是mybatis网站也提供了整合的用户指导,写的很具体直接就可以拿来用。还有一些特色的功能如直接批量插入数据,hibernate还是那死样子,在这里力挺mybatis。更多的东西大家去看开发文档,我就不多说了。mybatis跟ibatis的比较

我自己也写了个整合的小例子,大家去我的资源里下载就好了。

读书人网 >软件架构设计

热点推荐