iBatis & myBatis & Hibernate 要点记录

这三个是当前常用三大持久层框架,对其各自要点简要记录,并对其异同点进行简单比较。

1. iBatis

iBatis主要完成两件事情:

  1. 根据JDBC规范建立与数据库之间的连接、并进行连接管理与事务管理;
  2. 通过反射打通JAVA对象与数据库参数交互之间的相互转换关系。

基本使用步骤:

  1. 在xml配置文件中配置上数据库的连接池信息、事务相关的参数等,并指定要加载的SqlMapConfig文件;
  2. 在数据表对应的SqlMap xml配置文件中,定义数据表字段与JAVA Bean对象字段之间的映射关系,并定义需要执行的相关操作,比如select、update、delete、insert等操作对应的SQL语句;
  3. 在SqlMapConfig xml配置文件中,配置上步骤2中提及的每个数据表对应的配置映射文件;
  4. JAVA中定义好对应的JavaBean对象;
  5. 在JAVA中实现DAO层的代码逻辑,封装对应的增删改查接口提供给业务层使用。在DAO层的具体方法实现中,分别调用SQLMapClient实例中提供的增删改查方法,传入此前在步骤3中的xml映射文件中定义的SQLID,以及相关必要的参数。

特点:

  1. ibatis以SQL为中心的持久化层框架,其可以将SQL执行的结果映射到JAVA类对象上,同时也将JAVA对象映射为SQL的输入参数进行执行。
  2. ibatis简单易学,相对而言灵活性非常的高,在SQLMap中的SQL语句可以支持较为复杂个性化定制的SQL语句,当SQL执行存在性能瓶颈的时候,iBatis可以直接通过优化xml中的SQL语句来提升性能,具有更好的可控性。
  3. iBatis 封装了绝大多数的 JDBC 样板代码,使得开发者只需关注 SQL 本身,而不需要花费精力去处理例如注册驱动,创建 Connection,以及确保关闭 Connection 这样繁杂的代码。

2. myBatis

myBatis 作为 iBatis 高版本(iBatis只到2.x版本, 随后开发团队转投Google旗下,iBatis 3.x版本正式更名mybatis),主要是相对于iBatis 在细节层面会有所增强,配置起来更加简洁、在对象关系映射方面有所改进,效率有所提升。

3. hibernate

优点:

  1. DAO层的开发比较简单,不像myBatis还需要自行维护SQL与结果映射;
  2. 对象维护与缓存机制,比myBatis要好,对增删改查的对象维护要更加方便;
  3. 由于不需要写SQL语句,因此数据库的移植性会更好;

缺点:

  1. 不像myBatis,没有办法进行更为细致的SQL优化,无法减少无用查询字段;
  2. 入门门槛相对较高些。

4.异同点比较

  1. iBatis或者myBatis都需要手动编写SQL语句,hibernate不需要关注SQL的生成与结果的映射,可以更加专注于业务流程的实现;
  2. iBatis、myBatis相对于hibernate更加容易上手,且可以进行更为细致的SQL优化,减少查询字段;

缓存机制差别比较:

  1. 两者的二级缓存,除了系统默认之外,还可以完全自定义;
  2. 由于hibernate用户不需要关注SQL,因此不用担心脏数据问题,因为如果出现脏数据的话,框架会报错;但是使用myBatis的二级缓存的时候需要小心,避免出现脏数据影响系统正常使用。

选择要点:

使用 Hibernate 的开发者应该总是关注对象的状态(state),不必考虑 SQL 语句的执行。

  1. 根据使用场景来决定,如果一个项目组基本都是最简单的增删改查,则hibernate就很快,因为基本的SQL都已经封装好了,开发过程中不需要再去写SQL语句了,可以节省大量时间。但是如果项目中需要使用较多的复杂语句,或者对性能要求极其高,需要对SQL进行更为细致化的优化的时候,选择myBatis会更加好一些。

iBatis & myBatis & Hibernate 要点记录的更多相关文章

  1. MySQL 存储过程实例 与 ibatis/mybatis/hibernate/jdbc 如何调用存储过程

    虽然MySQL的存储过程,一般情况下,是不会使用到的,但是在一些特殊场景中,还是有需求的.最近遇到一个sql server向mysql迁移的项目,有一些sql server的存储过程需要向mysql迁 ...

  2. JDBC、ibatis(mybatis)、Hibernate有什么不同?

    ①JDBC编程流程固定,同时将sql语句和java代码混在了一起,经常需要拼凑sql语句,细节很繁琐: ②ibatis(mybatis)它不完全是一个ORM框架,因为MyBatis需要程序员自己编写S ...

  3. IBatis和Hibernate区别

    1. 简介 Hibernate是当前最流行的O/R mapping框架.它出身于sf.net,现在已经成为Jboss的一部分了.iBATIS是另外一种优秀的O/R mapping框架,现已改名叫myB ...

  4. iBatis --> MyBatis

    从 Clinton Begin 到 Google(从 iBatis 到 MyBatis,从 Apache Software Foundation 到 Google Code),Apache 开源代码项 ...

  5. Ibatis和Hibernate的比较

    Ibatis和Hibernate的比较 分类: IBATIS HIBERNATE2010-11-19 17:58 341人阅读 评论(0) 收藏 举报 hibernateibatis数据库sqlcac ...

  6. ibatis mybatis sql语句配置 符号不兼容 大于号 小于号<!CDATA[ ]>

    ibatis mybatis sql语句配置 符号不兼容 大于号 小于号<!CDATA[ ]> 因为这个是xml格式的,所以不允许出现类似">"这样的字符,但是都 ...

  7. paip.环境配置整合 ibatis mybatis proxool

    paip.环境配置整合 ibatis mybatis proxool  索引: ///////////1.调用 ///////////////2. ibatis 主设置文件  com/mijie/ho ...

  8. 我的hibernate学习记录(二)

    通过上一篇文章我的hibernate学习记录(一)基本上的入门了hibernate,但是,里面还有还多东西是通过迷迷糊糊的记忆,或者说copy直接弄进去的,所以这篇文章就需要对上篇的一些文件.对象进行 ...

  9. JAVA 中LinkedHashMap要点记录

    JAVA 中LinkedHashMap要点记录 构造函数中可能出现的几个参数说明如下: 1.initialCapacity 初始容量大小,使用无参构造方法时,此值默认是16 2.loadFactor ...

随机推荐

  1. 系统讲解CSS,前端开发最神奇的技术,新手的你一定不能错过

    前面小编带领大家重温了前端开发中最基本的HTML语言.如果你已经掌握了这门语言,那么恭喜你,可以去深入了解CSS技术了.CSS技术最主要的功能就是弥补HTML标记对在页面中显示外观的不足,对这些标记对 ...

  2. .NET采集数据,放入数据库总结

    第一次做采集Json的还简单一些但是XML的简直了......... JSON //采集数据 public string GetBetRecordToRepository()//随便你返回什么 { t ...

  3. faster-rcnn中ROI_POOIING层的解读

    在没有出现sppnet之前,RCNN使用corp和warp来对图片进行大小调整,这种操作会造成图片信息失真和信息丢失.sppnet这个模型推出来之后(关于这个网络的描述,可以看看之前写的一篇理解:ht ...

  4. C 其他一些

    1.联合,语法 union{成员1;成员2;} 联合间的成员共享同一个空间,也就是说,成员1赋值如果没有被清除,会体现在成员2上 2.位字段,结合结构体瓜分完整的类型存储空间,如 struct{ ; ...

  5. Servlet 笔记-Session 跟踪

    HTTP 是一种"无状态"协议,这意味着每次客户端检索网页时,客户端打开一个单独的连接到 Web 服务器,服务器会自动不保留之前客户端请求的任何记录. 但是仍然有以下三种方式来维持 ...

  6. 423. Reconstruct Original Digits from English (leetcode)

    Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...

  7. LeetCode 599. Minimum Index Sum of Two Lists (从两个lists里找到相同的并且位置总和最靠前的)

    Suppose Andy and Doris want to choose a restaurant for dinner, and they both have a list of favorite ...

  8. SQL查询一个表里面某个字段值相同的数据记录

    好长时间没有用SQL了...还停留在学生时代的水平... 转: 昨天遇到个面试题:查询一个表里面某个字段值相同的数据记录,好久没有写过这种,还真的花了点时间才写出来.如表g_carddetail,有 ...

  9. Vue.js—快速入门

    Vue.js是什么 Vue.js 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目 ...

  10. poj 2566 Bound Found

    Bound Found Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4384   Accepted: 1377   Spe ...