[JavaEE] Mybatis与Ibatis比较
虽然从正式版发布至今也有近一年时间,官方也非常友好的提供了中文版的使用手册,不过相信很多人还在项目中使用ibatis2.x版本。
究竟Mybatis有哪些新特性,能给我们带来哪些好处呢?以下是我看一位大侠研究后
1、Mybatis实现了接口绑定,使用更加方便。
在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件,
而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。
这可以说是Mybatis最重要的改进。
注意:
虽然Mybatis支持在接口中直接使用annotation的配置方式来简化配置,
不过强烈建议仍然使用xml配置的方式。毕竟annotation的配置方式功能有限且代码入侵性太强。使用xml配置方式才能体现出Mybatis的优势所在
2、对象关系映射的改进,效率更高
相
信很多在使用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,不过一对一映射为什么也不允许就不太明白了。可能是因为一对一是一对多的特例,而在设计框架的时候并没有考虑去处理或是难于处理这一特例吧。
3、MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。
熟悉struts2的人应该对OGNL表达式不会感到陌生,
MyBatis采用OGNL表达式简化了配置文件的复杂性,使用起来更简洁。
[JavaEE] Mybatis与Ibatis比较的更多相关文章
- mybatis和ibatis区别
ibatis本是apache的一个开源项目,2010年这个项目由apache software foundation 迁移到了google code,并且改名为mybatis. 1.Mybat ...
- mybatis、ibatis 和spring集成
mybatis是ibatis的升级版,spring也有自带mybatis的orm.所以,搭建ibatis的框架也会有多种方式(我这里mybatis是3.0的,ibatis是2.3的,spring是3. ...
- Mybatis与Ibatis的区别
Mybatis与Ibatis的区别: 1.Mybatis实现了接口绑定,使用更加方便 在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Mybatis实现了DAO接口 ...
- JavaEE MyBatis
1. 简介 MyBatis本是apache的一个开源项目iBatis的升级版,2013年11月迁移到Github,是三层架构中持久层框架. 目前提供了Java..NET.以及Ruby三种语言实现的版 ...
- Mybatis与Ibatis比较
随着开发团队转投Google Code旗下,ibatis3.x正式更名为Mybatis 虽然从正式版发布至今也有近一年时间,官方也非常友好的提供了中文版的使用手册,不过相信很多人还在项目中使用iba ...
- JAVAEE——Mybatis第一天:入门、jdbc存在的问题、架构介绍、入门程序、Dao的开发方法、接口的动态代理方式、SqlMapConfig.xml文件说明
1. 学习计划 第一天: 1.Mybatis的介绍 2.Mybatis的入门 a) 使用jdbc操作数据库存在的问题 b) Mybatis的架构 c) Mybatis的入门程序 3.Dao的开发方法 ...
- 开源顶级持久层框架——mybatis(ibatis)——day01
mybatis-day01 1.对原生态jdbc程序中的问题总结 1.1环境 java环境:jdk eclipse:indigo ...
- JavaORM框架之Mybatis篇(Ibatis)
欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...
- 动态insert mybatis与ibatis
mybatis: <insert id="insert" parameterType="hashMap"> INSERT INTO item < ...
随机推荐
- JWPL工具处理维基百科wikipedia数据用于NLP
JWPL处理维基百科数据用于NLP 处理zhwiki JWPL是一个Wikipedia处理工具,主要功能是将Wikipedia dump的文件经过处理.优化导入mysql数据库,用于NLP过程.以下以 ...
- overflow onclick ondblclick 练习
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js 事件冒泡、事件捕获、stopPropagation、preventDefault
转自:http://www.jb51.net/article/42492.htm (1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发. IE 5.5: ...
- C# 7.0新加特性
以下将是 C# 7.0 中所有计划的语言特性的描述.随着 Visual Studio “15” Preview 4 版本的发布,这些特性中的大部分将活跃起来.现在是时候来展示这些特性,你也告诉借此告诉 ...
- sql server 存储过程(事务,带参数声明,数据库瘦身)
CREATE PROCEDURE procedureName (@var1 as varchar(50),@var2 as varchar(50)) --建立未发临时表 AS begin tran - ...
- 图像局部显著性—点特征(SURF)
1999年的SIFT(ICCV 1999,并改进发表于IJCV 2004,本文描述):参考描述:图像特征点描述. 参考原文:SURF特征提取分析 本文有大量删除,如有疑义,请参考原文. SURF对SI ...
- 【Bootstrap】如何让响应式图片(img-responsive)水平居中
我们在用bootstrap排版内容的时候,有的时候在内容中需要图片水平居中对齐. 一般情况下,我们的图片都使用了 .img-responsive 类来实现响应式图片.如果需要实现响应式图片水平居中,那 ...
- weblogic详解
一.简介 WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发.集成.部署和管理大型分布式Web ...
- 卸载pycharm再重新安装后,找不到第三方库
遇到的问题: 看到pycharm出了新的版本,手痒把旧的版本卸载,然后安装了最新的版本,然后问题就来了. 之前通过PIP命令安装的第三方库,import的时候都报错,找不到模块.既然以前能正常使用,现 ...
- vue-router在同一个路由下切换,取不到变化的路由参数
最近用vue写项目的时候碰到一个问题,在同一个页面下跳转,路由地址不变,路由参数有变化,一开始只是在data里取路由的参数,发现根本取不到变化的路由参数. 例如:订单列表也跳转详情页,跳转方法如下 & ...