mybatis和hibernate比较
mybatis和hibernate比较
1.开发速度对比
- 首先,hebirnate比mybatis掌握起来较难,mybatis相对简单但是也相对简陋。对于一些只使用简单的增删改查,而很少复杂查询的项目,使用hibernate开发比较快,因为其已经封装好了sql语句。但是对于复杂查询较多的项目,就需要使用mybatis来开发较为合适。
2.开发工作量
- 两者都有相应的代码生成器,可以生成简单的dao层代码。但是对于高级查询,mybatis需要手动编写sql语句,并且需要写resultMap,但是hibernate有完整的映射机制,开发人员不需要关心sql的生成和结果映射。
3.sql优化方面
- hibernate会将表中所有字段查询出来,会损耗一定的性能。虽然hibernate也可以自己写sql语句,但是破坏了hibernate开发的简洁性。而mybatis手动编写sql,可以指定查找的字段。
- Hibernate HQL语句的调优需要将SQL打印出来,而Hibernate的SQL被很多人嫌弃因为太丑了。。MyBatis的SQL是自己手动写的所以调整方便。但Hibernate具有自己的日志统计。Mybatis本身不带日志统计,使用Log4j进行日志记录。
4.数据库移植性
- hibernate通过它强大的映射结构和hql语言,大大降低了对象与数据库(Oracle、MySQL等)的耦合性,而mybatis由于需要手写sql,因此与数据库的耦合性直接取决于程序员写sql的方法,如果sql不具通用性而用了很多某数据库特性的sql语句的话,移植性也会随之降低很多,成本很高。
5.缓存 - MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。
- 而Hibernate对查询对象有着良好的管理机制,用户无需关心SQL。所以在使用二级缓存时如果出现脏数据,系统会报出错误并提示。
参考https://cloud.tencent.com/developer/article/1478393