MyBatis与Hibernate的对比(各自优势)
通过了解以及深入学习总结了MyBatis与hibernate的区别(对比)本文将从一下几个方面讲解一下两者的区别:(有理解不到位的地方希望大家指出)
- 简介
hibernate是之前相当流行的ORM框架之一,对于JDBC提供了比较完成整的封装。它的O/R Mapping实现了POJO和数据库表之间的映射,以及sql语句的自动生成和执行。
MyBatis是现在非常流行的ORM框架,主要体现在POJO与SQL语句之间的映射关系。然后通过映射配置文件(mapper.xml)将sql所需要的参数,以及返回结果字段映射到制定的POJO。相对于Hibernate而言,MyBatis是一种SQL Mapper的ORM实现 - 开发速度
Hibernate的真正掌握要比MyBatis困难,Hibernate相对于MyBatis而言更加重量级一些,但二者都是轻量级框架。
MyBatis相对而言比较简单,学习成本比较低,容易上手,对sql优化比较方便(个人觉得这些也是它当前比较流行的原因) - 开发工作量
MyBatis需要我们手动编写sql语句,回归到最原始的方式,所以可以按照需求进行制定字段的查询,提高查询效率。
hibernate通过编写Hql语句来操作sql,虽然Hibernate也可以写原生的sql语句,但是这种方式破坏了hibernate的风筝以及简洁性。 - 数据库可移植性
MyBatis是书写sql语句的,所以当数据库发生改变时,sql语句需要对应改写。
hibernate是运用hql语句(方言)来生成对应的sql语句,当数据库发生改变时,只需要更改xml文件中对应的数据库配置就可以。 - 缓存机制对比
①两者缓存机制的相同点
Hibernate和MyBatis的二级缓存除了采用系统默认的缓存机制之外,都可以通过实现自己的缓存或者第三方缓存方案,创建适配器来完全覆盖缓存行为。
②两者缓存机制的不同点
hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后在通过具体的对象-表映射的配置文件中配置应用哪种缓存。
MyBatis的二级缓存都是配置在每一个对象-表映射中进行详细配置,这样针对不同的表可以有不同的缓存机制,并且MyBatis可以再命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。
③二者缓存机制的对比
因为hibernate对查询对象有着良好的管理机制,用户无需关心SQL。所以在使用二级缓存时如果出现脏数据,系统会报出错误并提示错误。而MyBatis在这一方面使用二级缓存时需要特别小心,如果不能完全确定数据更新操作的波及范围,避免Cache的盲目使用,否则脏数据讲给系统的正常运行带来很大的系统隐患。
总结
两者相同点:
Hibernate和MyBatis都可以通过SessionFactoryBuider由XML配置文件生成SessionFactory,再生成Session,最后由Session开启执行事务和sql。两者都支持JBDC和JTA事务处理。
Hibernate优势
· Hibernate的DAO层开发比Mybatis要简单,Mybatis需要维护sql语句。
·Hibernate对对象的维护和缓存要比MyBatis好,对增啥改成的对象维护比较方便。
·Hibernate数据库可以移植性比较好,MyBatis的可移植性比较差,不同的数据库需要编写不同的sql语句
·Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。
MyBatis的优势
·MyBatis可以进行更为细致的sql优化减少查询字段。
·MyBatis容易掌握,入门比较迅速,学习成本低。