Mybatis和Hibernate的区别(四)

Mybatis和Hibernate都是优秀的开源框架,它们都支持jdbc并且拥有缓存机制。那它们有什么区别呢?本次就对Hibernate和Mybatis做一个简单的对比。

1. mybatis是不完全的orm框架,实现sql语句与java代码相分离,灵活度较高,适合需求变化多的项目。

2. hibernate是ORM框架,以完全面向对象的方式操作数据库,数据库无关性好,但对sql的优化和修改比较困难,适合需求变化不多的中小型项目。

3. 开发速度

Mybatis框架比Hibernate相对简单很容易上手,Mybatis有相应的代码生成工具,可以生成基本简单的DAO层方法,而高级复杂的业务,需要手动编写SQL语句。而 Hibernate有良好的映射机制,使开发者更专注于业务流程。

4. 调优

   4.1 Mybatis调优

        Mybatis要求编写SQL语句,根据业务场景可以详细的进行SQL优化设计。 具有缓存机制,合理设计缓存策略。Mybatis在Session方面和Hibernate的Session生命周期是一致的,可以制定合理的Session管理机制。

  4.2 Hibernate调优

        Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但破坏了Hibernate开发的简洁性。Hibernate同样有缓存机制,可以制定合理的缓存策略,尽量使用延迟加载特性。采用合理的session管理机制。

5. 日志

  Hibernate有自己的日志统计,而Mybatis本身不带日志统计,使用log4j进行日志记录。

6. 扩展性

 Hibernate与数据库的无关性较好(只需在xml文件中配置即可,)所有的HQL语句与具体使用的数据库无关,移植性较好。Mybatis中所有的SQL语句依赖于所用的数据库,所以不同数据库类型的支持不好,即数据库无关性不好。

7. 缓存

  Hibernate的一级缓存是Session缓存,一级缓存是与Session的生命周期相关的。而它的二级缓存是SessionFactory级的缓存其中可分为内置缓存和外置缓存,其中的内置缓存中存放了关于SessionFactory对象的一些集合属性包含的数据,包括映射元素据及预定SQL语句等;而Mybatis一般也可分为二级缓存,一级缓存是 SqlSession 级别的缓存二级缓存是 mapper 级别的缓存,多个 SqlSession 共享,而它默认状态是开启一级缓存,这样对开发者而言是一种便捷。

以上便是简单的总结,不足之处欢迎留言指正,望不吝赐教!!!

发布了132 篇原创文章 · 获赞 1 · 访问量 7288

猜你喜欢

转载自blog.csdn.net/duan196_118/article/details/104271371