两者都是比较流行的ORM框架,前者的着力点在POJO与SQL之间的映射关系,而后者对操作数据库做出了较为完整的封装。
两者最大的区别:
Hibernate:有良好的映射机制,开发者无需关系SQL的生成与结果映射。
Mybatis:需要手动编写SQL语句以及ResultMap。
开发难度对比:
Hibernate:开发难度比Mybatis难度大,主要是因为他比较复杂,庞大,学习时间较长。
Mybatis:相对简单一些。
SQL书写比较:
Mybatis:手动书写,没有自己的日志统计,所以要借助log4j来记录日志。
Hibarnate:具有自己的日志统计,SQL语句也可以自己编写,但是这样就违背的Hibarnate框架的初衷。
缓存机制比较:
相同点:
Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。
不同点:
Hibernate对查询对象有着良好的管理机制,用户无需关心SQL。所以在使用二级缓存时如果出现脏数据,系统会报出错误并提示。(hibernate脏读报错)
MyBatis使用二级缓存时需要特别小心,如果不能完全确定数据更新操作的范围,避免Cache的盲目使用。否则,脏数据的出现会给系统的正常运行带来很大的隐患。(Mybatis脏读不报错)
总结:
Mybatis的优势在于他可以进行更细致的SQL优化,可以减少查询字段,并且也比较容易掌握。
Hibernate的优势在于他在DAO层开发比Mybatis简单,他的数据移植性比较好。