一、 开发对比
1.从开发的重量对比,hibernate比mybatis重很多
2. hibernate有自动建数据库表(包括表结构的更新等功能),开发过程中主要要关心业务逻辑,对数据表的生成修改,由hibernate底层完成;mybatis是能在数据库中操作数据表,如果需要更新表结构,只能操作数据库,不能用java代码实现。
3.Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
4.hibernate与mybatis都可以根据工具生成相应的简单的dao层。
二、 技术功能对比
1. hibernate开发社区与技术提供大于mybatis。
Hibernate 与Mybatis都是流行的持久层开发框架,但Hibernate开发社区相对多热闹些,支持的工具也多,更新也快,当前最高版本4.1.8。而Mybatis相对平静,工具较少,当前最高版本3.2。
2. hibernate数据库移植性远大于mybatis。
hibernate通过它强大的映射结构和hql语言,大大降低了对象与数据库(oracle、mysql等)的耦合性,而mybatis由于需要手写sql,因此与数据库的耦合性直接取决于程序员写sql的方法,如果sql不具通用性而用了很多某数据库特性的sql语句的话,移植性也会随之降低很多,成本很高。
3. hibernate拥有完整的日志系统,mybatis则欠缺一些。
hibernate日志系统非常健全,涉及广泛,包括:sql记录、关系异常、优化警告、缓存提示、脏数据警告等;而mybatis则除了基本记录功能外,功能薄弱很多。
三、 执行性能对比
1.在不考虑缓存的情况下,mybatis执行比hibernate快。
mybatis执行SQL语句,精确度高,hibernate一般都是又hql再生成SQL语句,在复杂查询中,查询次数会增加,查询速度比mybatis慢一点
2.hibernate缓存机制比较完善,mybatis二级缓存机制不佳。
3.hibernate的事务管理机制比较完善,mybatis开发时一般使用spring提供的事务管理器
四、 维护对比
1. Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
2.Hibernate对对象的维护要比MyBatis好,对增删改查的对象的维护要方便。
3.mybatis的SQL语句统一写在XML配置文件中,维护时查找SQL语句方便,对高级的查询维护较方便
五、 总结
hibernate与mybatis各有所长,hibernate功能强大,在映射、缓存、事务管理器、日志管理这几方面比较完善;mybatis轻巧,操作执行速度效率比hibernate快,直接使用SQL语句方便高级查询。
个人建议:查询较少,用hibernate,涉及到查询非常多且复杂的项目用mybatis。