Hibernate MyBatis对比
一、相同点
1.架构相同
Hibernate和MyBatis使用的是相同的框架,因为他们都是对JDBC的封装,只是Hibernate封装的更完全一点。

2.都可以使用XML创建映射文件和配置文件。也都可以是用注解,但是不推荐用注解,注解的使用范围比较小。
3.对于单一表,CRUD的操作都比较简单,两者的工作量没有什么区别。
4.都可以通过工具生成DAO的大部分代码。
5.二级缓存都可以自行配置,提高运行效率。
6.都支持日志保存,Hibernate有自己的日志保存机制,MyBatis需要使用Log4j。
二、不同点
- MyBatis在数据库的操作上比Hibernate要灵活,主要因为MyBatis是自己写SQL语句,并且支持动态查询,可以理解为一种可以编程的SQL语句。所以在数据的操作上是比Hibernate方便得多。Hibernate在这方面灵活性不如MyBatis,它用HQL语句来进行数据库的操作,HQL是完全数据库独立的,Hibernate通过HQL语句自动生成SQL语句,我们完全不用关心数据的到底是怎么被操作的。
- Hibernate支持继承映射和集合映射(一对一,一对多,多对多)。MyBatis在这方面则需要自己写SQL语句。Hibernate无需关心SQL的生成与结果映射,可以更专注于业务流程。
- Hibernate在优化方面的能力好得多。Hibernate的缓存策略配置更加丰富(SessionFactory对象保存二级缓存数据),并且默认使用延时加载特性(只有使用对象的时候才会请求SQL语句)。Session的管理机制也更加完善,同时支持批量抓取(把数据库的数据抓取到内存然后操作内存中的数据)。
- Hibernate的HQL语言和数据库完全独立,因此可移植性很好,换一个数据库不需要修改代码,MyBatis项目中所有的SQL语句都是依赖所用的数据库的,所以不同数据库类型的支持不好。
总结:Hibernate在我看来是更加面向对象的,我们关注点在与对象的状态,而不是到底执行了什么SQL语句。因此在数据库操作上不会像使用动态SQL语句的MyBatis那么轻松。它的好处在于后期的维护和调优比较强大。可以配置的东西比较多。Hibernate的功能如果要全部学会的话需要很大的学习成本。如果学会了的话实际的代码工作量会小很多,因为不用自己写SQL,并且性能和健壮性会好很多。
MyBatis就好在简单易用,上手快,延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,使用起来非常顺手。代价就是功能比较简陋,后期优化的空间不大,并且所有的对数据库底层的操作其实还是自己手写的。很多互联网公司在用MyBatis。

浙公网安备 33010602011771号