开发速度的对比:
开发工作量的对比:
sql优化方面:
Hibernate SQL语句的调优需要将SQL打印出来,⽽Hibernate的SQL被很多⼈嫌弃因为太丑了。
MyBatis的SQL是⾃⼰⼿动写的所以调整⽅便。但Hibernate具有⾃⼰的⽇志统计。Mybatis本身不带⽇志统计,使⽤Log4j进⾏⽇志记录。
对象管理的对比:
换句话说,使⽤ Hibernate 的开发者应该总是关注对象的状态(state),不必考虑 SQL 语句的执⾏。
这部分细节已经由 Hibernate 掌管妥当,只有开发者在进⾏系统性能调优的时候才需要进⾏了解。⽽MyBatis在这⼀块没有⽂档说明,⽤户需要对对象⾃⼰进⾏详细的管理。
缓存机制对比:
不同点:Hibernate的⼆级缓存配置在SessionFactory⽣成的配置⽂件中进⾏详细配置,然后再在具体的表-对象映射中配置是哪种缓存。
MyBatis的⼆级缓存配置都是在每个具体的表-对象映射中进⾏详细配置,这样针对不同的表可以⾃定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。
两者⽐较:因为Hibernate对查询对象有着良好的管理机制,⽤户⽆需关⼼SQL。所以在使⽤⼆级缓存时如果出现脏数据,系统会报出错误并提示。
⽽MyBatis在这⼀⽅⾯,使⽤⼆级缓存时需要特别⼩⼼。如果不能完全确定数据更新操作的波及范围,避免Cache的盲⽬使⽤。否则,脏数据的出现会给系统的正常运⾏带来很⼤的隐患。
Hibernate功能强⼤,数据库⽆关性好,O/R映射能⼒强,如果你对Hibernate相当精通
⽽且对Hibernate进⾏了适当的封装,那么你的项⽬整个持久层代码会相当简单,需要写的代码很少,开发速度很快,⾮常爽。
Hibernate的缺点就是学习⻔槛不低,要精通⻔槛更⾼,⽽且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样⽤好Hibernate⽅⾯需要你的经验和能⼒都很强才⾏。
iBATIS⼊⻔简单,即学即⽤,提供了数据库查询的⾃动对象绑定功能,⽽且延续了很好的SQL使⽤经验,对于没有那么⾼的对象模型要求的项⽬来说,相当完美
iBATIS的缺点就是框架还是⽐较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要⾃⼰写的,⼯作量也⽐较⼤,⽽且不太容易适应快速数据库修改。
![](https://img-blog.csdnimg.cn/7c0a65349cc4426e88d52ff776da42f9.jpeg)