`
Supanccy2013
  • 浏览: 220785 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Mybatis与Ibatis比较

阅读更多
注:本片博文来自:http://jc-dreaming.iteye.com/blog/1003778
 
随着开发团队转投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

    1. **API变更**:MyBatis的API与iBatis有所不同,比如SqlSession接口和Mapper接口的使用方式。开发者需要理解并适应这些变化。 2. **配置文件迁移**:iBatis使用的是`sqlMapConfig.xml`,而MyBatis使用`mybatis-...

    myBatis or ibatis 神器

    总结起来,myBatis和iBatis都是强大的Java持久层框架,它们通过将SQL语句与Java代码分离,提高了开发效率和代码的可维护性。myBatis作为iBatis的升级版,提供了更多的功能和便利,而iBatis Auto Generator这样的工具...

    myBatis和ibatis的区别

    - **ibatis与myBatis的关系**:在ibatis的基础上,通过社区的努力与贡献,最终演变成了myBatis,两者的转换不仅仅是名称上的变化,更重要的是在功能上有了显著提升。 #### 三、配置文件的变化 - **DTD与XML配置...

    generate mybatis ibatis artifacts

    MyBatis和iBatis是两个著名的Java持久层框架,它们简化了数据库操作与Java对象之间的映射。本文将深入探讨“generate mybatis ibatis artifacts”这个主题,它是一款为Eclipse开发的插件,旨在帮助开发者自动化创建...

    mybatis和ibatis代码生成工具

    MyBatis和iBatis是两个著名的Java持久层框架,它们都致力于简化数据库与Java代码之间的交互。在Java开发中,代码生成工具可以极大地提高开发效率,减少手动编写重复的CRUD(创建、读取、更新、删除)操作。本压缩包...

    generator, A code generator for MyBatis and iBATIS..zip

    生成的Mapper接口可以直接与MyBatis的SqlSession进行交互,执行数据库操作。 XML映射文件包含了具体的SQL语句,MBG会根据表结构生成对应的SELECT、INSERT、UPDATE和DELETE语句。这些映射文件会定义字段到数据库列的...

    根据MyBatis或iBatis的SQLMapper文件反向生成数据库表

    根据MyBatis或iBatis的...这可以通过编程语言与数据库操作的API来实现,比如Java中的JDBC或者MyBatis/iBatis提供的API。 执行SQL语句: 最后,将生成的数据库表结构信息通过执行相应的SQL语句来创建或者修改数据库表。

    mybatis,ibatis,hibernate 显示查询SQL

    在IT行业中,数据库操作是应用程序开发的核心部分,而MyBatis、iBatis和Hibernate都是流行的Java持久层框架,它们简化了与数据库交互的过程。这三个框架各有特点,但都提供了ORM(对象关系映射)机制,帮助开发者将...

    MyBatis(iBatis 3)入门示例 及 整合Mybatis与Spring3

    iBatis 3是MyBatis的前身,随着时间的推移,MyBatis逐渐发展成为一个更加成熟、功能更加强大的框架。MyBatis消除了几乎所有的JDBC代码和手动设置参数以及获取结果集。它使开发者能够专注于SQL本身,而不再需要处理...

    MyBatis(iBATIS) 学习

    《MyBatis(iBATIS) 学习指南》 MyBatis,原名iBATIS,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML...

    mybatis、ibatis、spring各种整合方式

    标题 "mybatis、ibatis、spring各种整合方式" 涉及的是在Java开发中将MyBatis、iBatis与Spring框架集成的各种方法。MyBatis和iBatis(后更名为MyBatis)是两个流行的持久层框架,而Spring是一个全面的企业级应用框架...

    mybatis/ibatis自动生成SQLMapper脚本

    MyBatis/iBatis 是两个流行的数据访问框架,它们简化了Java开发中的数据库操作。iBatis 是早期的版本,而 MyBatis 是其后继者,提供了更加强大和灵活的功能。本教程将深入探讨如何使用MyBatis/iBatis自动生成SQL...

    MyBatis和IBatis配置文件中的自动补全功能

    4. **合理组织映射文件**:将映射文件(Mapper.xml)放在正确的目录下,一般与对应的Java接口同名且位于`src/main/resources`下,这样MyBatis插件才能正确识别并提供补全。 5. **保持DTD文件最新**:随着MyBatis的...

    根据mybatis/ibatis sqlmapper文件解析生成数据库表

    标题 "根据mybatis/ibatis sqlmapper文件解析生成数据库表" 暗示了我们将会探讨一个关于MyBatis或iBatis框架的工具,它能够解析SQL映射文件并根据这些文件自动生成数据库表。这个过程对于快速构建数据库模型,尤其是...

    Mybatis/ibatiS多表映射 一对一 一对多 extjs前台取值 详细讲解

    在IT行业中,数据库操作是必不可少的一部分,特别是在使用像Mybatis或iBatis这样的持久层框架时。本话题将深入探讨如何在这些框架中处理多表映射,包括一对一和一对多的关系,以及如何在ExtJS前端获取这些数据。 ...

    iBatis和MyBatis对比

    在MyBatis中,配置文件的结构与iBatis有所不同。全局配置文件通常命名为`Configuration.xml`,而映射文件则定义了数据库表与Java对象之间的映射关系。全局配置文件中可以设置的内容包括: 1. `properties`:定义了...

    MyBatis(ibatis)学习文档.docx

    MyBatis(ibatis)学习文档 MyBatis是一款流行的基于Java的持久层框架,曾用名为iBatis。MyBatis提供了一种简洁高效的方式来访问关系数据库。通过使用MyBatis,可以将数据库访问代码与业务逻辑代码分离,从而提高系统...

    mybatis/ibatis代码生成器

    数据库代码生成器,支持mybatis/ibatis两个版本;注意,ibatis(ibatis2)和mybaits(ibatis3)的xml文件中有一些语法不一样,例如 select 等元素的 parameterClass 属性改为了 parameterType 属性,resultClasss 属性改为了 ...

    ibatis2mybatis-master.zip

    描述中的“一键转换,不用自己再手动替换标签”意味着这个工具可以自动化处理iBATIS与MyBatis之间的转换工作,减少了开发者手动修改大量代码的时间和精力。通常,这样的转换涉及到的主要任务包括: 1. **XML配置...

    ibatis2mybatis-master

    可以帮你将 ibatis 2.x sqlmap 文件转换为 myBatis 3.x mapper 文件,该工具是使用了 Ant 构建任务进行 XSTL 转换和一些语法文字替换 该工具下载下来使用非常简单,把你要转换的所有 sqlmap 文件放到 source 文件夹...

Global site tag (gtag.js) - Google Analytics