1.开发方面:
Hibernate开发中,sql语句已经被封装,可以直接使用,加快系统开发
Mybatis属于半自动化,sql需要手工完成,稍微繁琐
对于庞大复杂的项目,复杂语句较多,则优先选用Mybatis
2.sql优化方面:
Hibernate自动生成sql,有些语句较为繁琐,会多消耗一些性能
Mybatis手动编写sql,可以避免不需要的查询,提高系统性能
3.对象管理方面:
Hibernate是完整的ORM框架,无需过多关注底层实现,只要去管理对象即可
Mybatis需要自行管理映射关系
4.缓存方面:
相同点:Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。
不同点:
Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存。
MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现
总结:
Hibernate优势
Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。Mybatis优势
MyBatis可以进行更为细致的SQL优化,可以减少查询字段
MyBatis容易掌握,而Hibernate门槛较高。