Hibernate 和 Mybatis 二者相比的优缺点

一、开发上手难度java

hibernate的真正掌握(封装的功能和特性很是多)要比Mybatis来得难。mysql

在真正产品级应用上要用Hibernate,不只对开发人员的要求高,hibernate每每还不适合(多表关联查询等)。sql

 

二、系统调优调优方案对比数据库

Hibernate:缓存

* 制定合理的缓存策略;mybatis

* 尽可能使用延迟加载特性;
* 采用合理的Session管理机制;
* 使用批量抓取,设定合理的批处理参数(batch_size);app

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

 

Mybatis:优化

* MyBatis在Session方面和Hibernate的Session生命周期是一致的,一样须要合理的Session管理机制。MyBatis一样具备二级缓存机制。 .net

* MyBatis能够进行详细的SQL优化设计。

 

三、SQL优化方面

Hibernate的查询会将表中的全部字段查询出来,这一点会有性能消耗。

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

 

Mybatis的SQL是手动编写的,因此能够按需求指定查询的字段。

 

总的来讲,Hibernate使用的是封装好,通用的SQL来应付全部场景,而Mybatis是针对响应的场景设计的SQL。Mybatis的SQL会更灵活、可控性更好、更优化。


四、移植性

Hibernate与具体数据库的关联只需在XML文件中配置便可,全部的HQL语句与具体使用的数据库无关,移植性很好。

MyBatis项目中全部的SQL语句都是依赖所用的数据库的,因此不一样数据库类型的支持很差。

 

五、JDBC

Hibernate是在JDBC上进行了一次封装。

Mybatis是基于原生的JDBC的。Mybatis有运行速度上的优点。

 

六、功能、特性丰富程度

Hibernate提供了诸多功能和特性。要全掌握很难。

Mybatis 自身功能颇有限,但Mybatis支持plugin,可使用开源的plugin来扩展功能。

 

七、动态SQL

Mybatis mapper xml 支持动态SQL

Hibernate不支持

 

 

实际项目关于Hibernate和Mybatis的选型:

一、数据量:有如下状况最好选用Mybatis

若是有超过千万级别的表

若是有单次业务大批量数据提交的需求(百万条及以上的),这个尤为不建议用Hibernate

若是有单次业务大批量读取需求(百万条及以上的)(注,hibernate多表查询比较费劲,用很差很容易形成性能问题)

二、表关联复杂度

若是主要业务表的关联表超过20个(大概值),不建议使用hibernate

三、人员

若是开发成员多数不是多年使用hibernate的状况,建议使用mybatis

四、数据库对于项目的重要程度

若是项目要求对于数据库可控性好,可深度调优,用mybatis

相关文章
相关标签/搜索