mybatis和hibernate的对比总结

简介: mybatis和hibernate的对比总结

mybatis和hibernate

第一步, 首先让我们对mybatis和hibernate对比了解下        

1、 Hibernate :Hibernate 是当前非常流行的ORM框架,对数据库结构提供了较为完整的封装,都是为了简化Dao层的操作。

   Mybatis:Mybatis同样也是非常流行的ORM框架,主要着力点在于POJO 与SQL之间的映射关系,都是为了简化Dao层的操作。


2、Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生 成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是  

   差不多的。Hibernate和MyBatis都支持JDBC和JTA事务处理。


3、Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方 案,创建适配器来完全覆盖缓存行为,一般在这里的话我们用encache和mybatis和spring集成比较多,这个时候你可以你学习下encache也可以去了解小分布式缓存mencached 还有oschache都可以学习下。


  MyBatis 参考资料官网:http://www.mybatis.org/core/zh/index.html

  Hibernate参考资料: http://docs.jboss.org/hibernate/core/3.6/reference/zh-CN/html_single/

  不同点:

1、hibernate是全自动,而mybatis是半自动。

  Hibernate完全实现了对JDBC的封装,可看成"全自动洗衣机".调用一个save()方法就能实现插入操作,完全不需要写sql.当然,它也支持类似sql的hql语句.ibatis需要自己写sql,但是sql写在配置文件(.xml)文件里面,可看成"半自动洗衣机".mybatis初级阶段可理解成就是ibatis.

   

2、hibernate不怎么需要写sql,而mybatis需要把sql写在配置文件里面。


3、 hibernate数据库移植性和扩展性远大于mybatis,维护性比较好。

   Mybatis由于所有SQL都是依赖数据库书写的,所以扩展性,迁移性比较差,成本很高。Hibernate与数据库具体的关联都在XML中,所以HQL对具体是用什么数据库并不是很关心,大大降低了对象与数据库(oracle、mysql等)的耦合性。

   

4、hibernate开发速度比mybatis相对快点

  Hibernate的开发难度要大于Mybatis。主要由于Hibernate比较复杂、庞大,学习周期较长。

  而Mybatis则相对简单一些,并且Mybatis主要依赖于sql的书写,让开发者感觉更熟悉。

  Hibernate和MyBatis都有相应的代码生成工具。可以生成简单基本的DAO层方法。

  针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。


5、 hibernate拥有完整的日志系统,mybatis则欠缺一些。

   hibernate日志系统非常健全,涉及广泛,包括:sql记录、关系异常、优化警告、缓存提示、脏数据警告等;而mybatis则除了基本记录功能外,功能薄弱很多。


6、mybatis相比hibernate需要关心很多细节

  hibernate配置要比mybatis复杂的多,学习成本也比mybatis高。但也正因为mybatis使用简单,才导致它要比hibernate关心很多技术细节。mybatis由于不用考虑很多细节,开发模式上与传统jdbc区别很小,因此很容易上手并开发项目,但忽略细节会导致项目前期bug较多,因而开发出相对稳定的软件很慢,而开发出软件却很快。hibernate则正好与之相反。但是如果使用hibernate很熟练的话,实际上开发效率丝毫不差于甚至超越mybatis。


7、hibernate缓存机制比mybatis强大

 

  Hibernate一级缓存是Session缓存,利用好一级缓存就需要对Session的生命周期进行管理好。建议在一个Action操作中使用一个Session。一级缓存需要对Session进行严格管理。


  Hibernate二级缓存是SessionFactory级的缓存。 SessionFactory的缓存分为内置缓存和外置缓存。内置缓存中存放的是SessionFactory对象的一些集合属性包含的数据(映射元素据及预定SQL语句等),对于应用程序来说,它是只读的。外置缓存中存放的是数据库数据的副本,其作用和一级缓存类似.二级缓存除了以内存作为存储介质外,还可以选用硬盘等外部存储设备。二级缓存称为进程级缓存或SessionFactory级缓存,它可以被所有session共享,它的生命周期伴随着SessionFactory的生命周期存在和消亡。


  MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。MyBatis 3 中的缓存实现的很多改进都已经实现了,使得它更加强大而且易于配置。


  默认情况下是没有开启缓存的,除了局部的 session 缓存,可以增强变现而且处理循环 依赖也是必须的。要开启二级缓存,你需要在你的 SQL 映射文件中添加一行:


 字面上看就是这样。这个简单语句的效果如下:


 映射语句文件中的所有 select 语句将会被缓存。

 映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。

 缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。

 根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。

 缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。

 缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而 且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改


8、sql直接优化上,mybatis要比hibernate方便很多

  由于mybatis的sql都是写在xml里,因此优化sql比hibernate方便很多。而hibernate的sql很多都是自动生成的,无法直接维护sql;虽有hql,但功能还是不及sql强大,见到报表等变态需求时,hql也歇菜,也就是说hql是有局限的;hibernate虽然也支持原生sql,但开发模式上却与orm不同,需要转换思维,因此使用上不是非常方便。总之写sql的灵活度上hibernate不及mybatis。


9、mybait比hibernate更加灵活,驾驭型更好


 Mybatis优势

 MyBatis可以进行更为细致的SQL优化,可以减少查询字段。

 MyBatis容易掌握,而Hibernate门槛较高。

 Hibernate优势

 Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。

 Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。

 Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。

 Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。


相关文章
|
8月前
|
SQL Java 数据库连接
hibernate和mybatis的区别
hibernate和mybatis的区别
|
SQL XML Java
mybatis基本构成&mybatis与hibernate的区别&添加mybatis支持
mybatis基本构成&mybatis与hibernate的区别&添加mybatis支持
|
5月前
|
SQL Java 数据库连接
MyBatis 和 Hibernate 有什么区别?
【8月更文挑战第21天】
88 0
|
8月前
|
SQL Java 数据库连接
MyBatis与Hibernate区别
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
|
6月前
|
SQL Java 数据库连接
Java面试题:简述ORM框架(如Hibernate、MyBatis)的工作原理及其优缺点。
Java面试题:简述ORM框架(如Hibernate、MyBatis)的工作原理及其优缺点。
99 0
|
8月前
|
SQL Java 数据库连接
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
|
8月前
|
SQL 存储 Java
MyBatis与Hibernate有什么区别?
MyBatis与Hibernate有什么区别?
57 1
|
8月前
|
缓存 Java 数据库连接
Hibernate或MyBatis:ORM映射、缓存机制等知识讲解梳理
Hibernate或MyBatis:ORM映射、缓存机制等知识讲解梳理
141 0
|
SQL 缓存 Java
聊聊Hibernate和Mybatis的区别
聊聊Hibernate和Mybatis的区别
61 0
|
SQL Java 数据库连接
Java 最常见的面试题:mybatis 和 hibernate 的区别有哪些?
Java 最常见的面试题:mybatis 和 hibernate 的区别有哪些?
153 0