Mybatis与Ibatis比较

随着开发团队转投Google Code旗下,ibatis3.x正式改名为Mybatis 
虽然从正式版发布至今也有近一年时间,官方也很是友好的提供了中文版的使用手册,不过相信不少人还在项目中使用ibatis2.x版本。 
究竟Mybatis有哪些新特性,能给咱们带来哪些好处呢?如下是我看一位大侠研究后

一、Mybatis实现了接口绑定,使用更加方便。 
在ibatis2.x中咱们须要在DAO的实现类中指定具体对应哪一个xml映射文件, 
而Mybatis实现了DAO接口与xml映射文件的绑定,自动为咱们生成接口的具体实现,使用起来变得更加省事和方便。 
这能够说是Mybatis最重要的改进。 

注意: 
虽然Mybatis支持在接口中直接使用annotation的配置方式来简化配置, 
不过强烈建议仍然使用xml配置的方式。毕竟annotation的配置方式功能有限且代码入侵性太强。使用xml配置方式才能体现出Mybatis的优点所在 

二、对象关系映射的改进,效率更高 
相信不少在使用ibatis2.x的朋友并无经过ibatis的xml映射文件来实现对象间的关系映射。其实也确实没有必要那么作,由于ibatis2.x采用的是“嵌套查询”的方式将对象之间的关系经过查询语句的直接拼装来实现,其效果和在DAO或Service中自行封装是同样的。 
不过这种方式存在“N+1查询问题”。 
归纳地讲,N+1查询问题能够是这样引发的: 
? 你执行了一个单独的SQL语句来获取结果列表(就是+1)。 
? 对返回的每条记录,你执行了一个查询语句来为每一个加载细节(就是N)。 
这个问题会致使成百上千的SQL语句被执行。这一般不是指望的。 

而在Mybatis中,除了兼容ibatis2.x中的“嵌套查询”方式外,还提供了直接“嵌套结果”的方式,其效果至关于直接经过一句sql将查询出的dto对象自动封装成所需的对象。 
具体实现方法请自行参考Mybatis官方使用手册,不在此累述. 

不过实际上这一改进所带来的好处也是颇有限的。由于这一方式在使用分页的时候并不起做用,或者说嵌套对象的结果集是不容许进行分页的。这一点在Mybatis框架中已经作出了明确的限制(org.apache.ibatis.executor.resultset.NestedResultSetHandler里34行),而实际项目中须要分页的状况又特别多…… 
仔细一想,一对多映射确实不能经过配置文件来分页,由于这时查询出的记录数并不等于实际返回对象的size,不过一对一映射为何也不容许就不太明白了。多是由于一对一是一对多的特例,而在设计框架的时候并无考虑去处理或是难于处理这一特例吧。 

三、MyBatis采用功能强大的基于OGNL的表达式来消除其余元素。 
熟悉struts2的人应该对OGNL表达式不会感到陌生, 
MyBatis采用OGNL表达式简化了配置文件的复杂性,使用起来更简洁。 


sql

可能较为关心的是apache

Mybatis实现了接口绑定,使用更加方便。框架

iBatis / MyBatis 3提供了一个新的功能:的注解。spa

http://jc-dreaming.iteye.com/admin/blogs/1003781设计

相关文章
相关标签/搜索