文档章节

Mybatis与Ibatis比较

geek_light
 geek_light
发布于 2015/05/19 13:44
字数 915
阅读 209
收藏 14

随着开发团队转投Google Code旗下,ibatis3.x正式更名为Mybatis 
虽然从正式版发布至今也有近一年时间,官方也非常友好的提供了中文版的使用手册,不过相信很多人还在项目中使用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表达式简化了配置文件的复杂性,使用起来更简洁。 


可能较为关心的是

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

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


本文转载自:http://jc-dreaming.iteye.com/blog/1003778

共有 人打赏支持
geek_light
粉丝 5
博文 40
码字总数 13761
作品 0
东城
后端工程师
加载中

评论(1)

i
itxx2016
推荐国内最流行的ibatis、mybatis代码生成网站 --- fwjava.com
无需任何安装配置,直接在线生成,且十分规范好用.
现在,很多知名的互联网公司都在用它.
从 iBatis 到 MyBatis,你准备好了吗?

对于从事 Java EE 的开发人员来说,iBatis 是一个再熟悉不过的持久层框架了,在 Hibernate、JPA 这样的一站式对象 / 关系映射(O/R Mapping)解决方案盛行之前,iBaits 基本是持久层框架的不...

被风遗忘
2012/03/30
0
0
凤凰涅槃:从 iBatis 到 MyBatis.

从 iBatis 到 MyBatis,你准备好了吗? 对于从事 Java EE 的开发人员来说,iBatis 是一个再熟悉不过的持久层框架了,在 Hibernate、JPA 这样的一站式对象 / 关系映射(O/R Mapping)解决方案...

被风遗忘
2012/04/18
0
1
ibatis MyBatis区别与联系

简介: 本文主要讲述了 iBatis 2.x 和 MyBatis 3.0.x 的区别,以及从 iBatis 向 MyBatis 移植时需要注意的地方。通过对本文的学习,读者基本能够了解 MyBatis 有哪些方面的改进,并能够顺利使...

为了美好的明天
04/17
0
0
【持久化框架】Mybatis简介与原理转载

从这篇博文开始我们学习一下Mybatis,希望大家提出宝贵的建议。 什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code...

轩辕剑
07/04
0
0
【转】我为什么选择 iBatis 而不是 Hibernate(对于正在选型的人的建议)

我在最初的选型的时候是打算选择 Hibernate 的,在研究的过程中发现了 iBatis,经过 分析比较之后我选择了 iBatis。现在我已经使用 iBatis 完成了一个中小型的项目。这个 项目在性能、可维护...

mj4738
2012/02/18
0
3

没有更多内容

加载失败,请刷新页面

加载更多

Django支持中文

django是支持中文界面, 先找到Django语言包安装目录,我的在: /usr/local/python3/lib/python3.6/site-packages/django/conf/locale 有zh-Hans和zh-Hant两个文件, 其中zh-Hans是简体中文,...

MichaelShu
18分钟前
1
0
迷宫问题:顺序栈解法

采用顺序栈以及回溯法,一个比较简单的问题,但是从来没有写过,也算是弥补一下自己欠数据结构的债吧,居然也花了一个半小时,无地自容了。。 定义好数据结构求解算法就显得容易一些了。 st...

LoSingSang
25分钟前
0
0
Zookeeper 概述及应用场景

一、概述 分布式协调技术,主要用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种临界资源,防止造成"脏数据"的后果。 ZooKeeper是一个分布式的,开放源码的分布式应用...

PeakFang-BOK
32分钟前
0
0
(译)OpenGL ES2.0 – Iphone开发指引

教程截图: OpenGL ES 是可以在iphone上实现2D和3D图形编程的低级API。 如果你之前接触过 cocos2d,sparrow,corona,unity 这些框架,你会发现其实它们都是基于OpenGL上创建的。 多数程序员...

robslove
42分钟前
0
0
金九银十跳槽季,程序员面试点解析之Java专场

前言 近年来Java工程师这个岗位炙手可热,市场需求大,学习Java的人也越来越多,所以IT企业与求职者的选择都比较多,那么IT企业在面试时都会提哪些问题呢。下面为大家分享 Java高级工程师面试...

老道士
45分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部