Hibernate 与mybatis的区别

首先简单介绍下二者的概念sql

Hibernate :Hibernate 是当前最流行的ORM框架,对数据库结构提供了较为完整的封装。数据库

Mybatis:Mybatis一样也是很是流行的ORM框架,主要着力点在于POJO 与SQL之间的映射关系。apache

Hibernate 出身于sf.net,如今已经成为Jboss的一部分; Mybatis 目前属于apache的一个子项目。

其次具体从几个方面说一下二者的区别缓存

1.二者最大的区别:app

针对简单逻辑,Hibernate和MyBatis都有相应的代码生成工具,能够生成简单基本的DAO层方法。框架

针对高级查询,Mybatis须要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,能够更专一于业务流程。相对HibernateO/R”而言,iBATIS 是一种“Sql Mapping”的ORM实现。ide

2.开发难度对比工具

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

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

3.sql书写比较,以及优化

Hibernate的调优方案

制定合理的缓存策略;

尽可能使用延迟加载特性;

采用合理的Session管理机制;

使用批量抓取,设定合理的批处理参数(batch_size);

进行合理的O/R映射设计

Mybatis调优方案

MyBatis在Session方面和Hibernate的Session生命周期是一致的,一样须要合理的Session管理机制。MyBatis一样具备二级缓存机制。 MyBatis能够进行详细的SQL优化设计。

SQL优化方面

Hibernate的查询会将表中的全部字段查询出来,这一点会有性能消耗。Hibernate也能够本身写SQL来指定须要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的,因此能够按需求指定查询的字段。

Hibernate HQL语句的调优须要将SQL打印出来,而Hibernate的SQL被不少人嫌弃由于太丑了。MyBatis的SQL是本身手动写的因此调整方便。但Hibernate具备本身的日志统计。Mybatis自己不带日志统计,使用Log4j进行日志记录。

Mybatis的SQL是手动编写的,因此能够按需求指定查询的字段。不过没有本身的日志统计,因此要借助log4j来记录日志。

Hibernate也能够本身写SQL来指定须要查询的字段,但这样就破坏了Hibernate开发的简洁性。不过Hibernate具备本身的日志统计。

4.数据库扩展性比较

Mybatis因为全部SQL都是依赖数据库书写的,因此扩展性,迁移性比较差。

Hibernate与数据库具体的关联都在XML中,因此HQL对具体是用什么数据库并非很关心。

5.缓存机制比较

相同点:Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,均可以经过实现你本身的缓存或为其余第三方缓存方案,建立适配器来彻底覆盖缓存行为。

不一样点:Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,而后再在具体的表-对象映射中配置是那种缓存。

MyBatis的二级缓存配置都是在每一个具体的表-对象映射中进行详细配置,这样针对不一样的表能够自定义不一样的缓存机制。而且Mybatis能够在命名空间中共享相同的缓存配置和实例,经过Cache-ref来实现。

二者比较:由于Hibernate对查询对象有着良好的管理机制,用户无需关心SQL。因此在使用二级缓存时若是出现脏数据,系统会报出错误并提示。

而MyBatis在这一方面,使用二级缓存时须要特别当心。若是不能彻底肯定数据更新操做的波及范围,避免Cache的盲目使用。不然,脏数据的出现会给系统的正常运行带来很大的隐患。

6.总结:

Hibernate与MyBatis均可以是经过SessionFactoryBuider由XML配置文件生成SessionFactory,而后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。

而MyBatis的优点是MyBatis能够进行更为细致的SQL优化,能够减小查询字段,而且容易掌握。

Hibernate的优点是DAO层开发比MyBatis简单,Mybatis须要维护SQL和结果映射。数据库移植性很好,MyBatis的数据库移植性很差,不一样的数据库须要写不一样SQL。有更好的二级缓存机制,可使用第三方缓存。MyBatis自己提供的缓存机制不佳。

相关文章
相关标签/搜索