MyBatis -> MyBatis 与Hibernate 有哪些不同?

MyBatis 与Hibernate 有哪些不同?

SQL 和 ORM 的争论,永远都不会终⽌

开发速度的对⽐:

  • Hibernate的真正掌握要⽐Mybatis难些。

  • Mybatis框架相对简单很容易上⼿,但也相对简陋些。

  • ⽐起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项⽬需求去考虑究竟哪⼀个更适合项⽬开发

    • ⽐如:⼀个项⽬中⽤到的复杂查询基本没有,就是简单的增删改查,这样选择hibernate效率就很快了,
    • 因为基本的sql语句已经被封装好了,根本不需要你去写sql语句,这就节省了⼤量的时间
    • 但是对于⼀个⼤型项⽬,复杂语句较多,这样再去选择hibernate就不是⼀个太好的选择
    • 选择mybatis 就会加快许多,⽽且语句的管理也⽐较⽅便。

开发⼯作量的对⽐:

  • HibernateMyBatis都有相应的代码⽣成⼯具,可以⽣成简单基本的DAO层⽅法。
  • 针对⾼级查询,Mybatis需要⼿动编写SQL语句,以及ResultMap。
  • ⽽Hibernate有良好的映射机制,开发者⽆需关⼼SQL的⽣成与结果映射,可以更专注于业务流程

sql优化⽅⾯:

  • Hibernate的查询会将表中的所有字段查询出来,这⼀点会有性能消耗

  • Hibernate也可以⾃⼰写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。

  • ⽽Mybatis的SQL是⼿动编写的,所以可以按需求指定查询的字段。

  • Hibernate HQL语句的调优需要将SQL打印出来,⽽Hibernate的SQL被很多⼈嫌弃因为太丑了。

  • MyBatis的SQL是⾃⼰⼿动写的所以调整⽅便。

  • 但Hibernate具有⾃⼰的⽇志统计。Mybatis本身不带⽇志统计,使⽤Log4j进⾏⽇志记录

对象管理的对⽐:

  • Hibernate 是完整的对象/关系映射解决⽅案

    • 它提供了对象状态管理(state management)的功能, 使开发者不再需要理会底层数据库系统的细节
    • 也就是说,相对于常⻅的 JDBC/SQL 持久层⽅案中需要管理 SQL 语句
    • Hibernate采⽤了更⾃然的⾯向对象的视⻆来持久化 Java 应⽤中的数据
  • 换句话说,使⽤ Hibernate 的开发者应该总是关注对象的状态(state),不必考虑 SQL 语句的执⾏。

  • 这部分细节已经由 Hibernate 掌管妥当,只有开发者在进⾏系统性能调优的时候才需要进⾏了解。

  • ⽽ MyBatis在这⼀块没有⽂档说明,⽤户需要对对象⾃⼰进⾏详细的管理。

缓存机制对⽐:

  • 相同点:都可以实现⾃⼰的缓存或使⽤其他第三⽅缓存⽅案,创建适配器来完全覆盖缓存⾏为。

  • 不同点

    • Hibernate的⼆级缓存配置在SessionFactory⽣成的配置⽂件中进⾏详细配置,然后再在具体的表-对象映射中配置是哪种缓存。
    • MyBatis的⼆级缓存配置都是在每个具体的表-对象映射中进⾏详细配置,这样针对不同的表可以⾃定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。
  • 两者⽐较:因为Hibernate对查询对象有着良好的管理机制,⽤户⽆需关⼼SQL。所以在使⽤⼆级缓存时如果出现脏数据,系统会报出错误并提示。

  • ⽽MyBatis在这⼀⽅⾯,使⽤⼆级缓存时需要特别⼩⼼。如果不能完全确定数据更新操作的波及范围,避免Cache的盲⽬使⽤。否则,脏数据的出现会给系统的正常运⾏带来很⼤的隐患

  • Hibernate功能强⼤,数据库⽆关性好,O/R映射能⼒强,如果你对Hibernate相当精通,⽽且对Hibernate进⾏了适当的封装,那么你的项⽬整个持久层代码会相当简单,需要写的代码很少,开发速度很快,⾮常爽。

  • Hibernate的缺点就是学习⻔槛不低,要精通⻔槛更⾼,⽽且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样⽤好Hibernate⽅⾯需要你的经验和能⼒都很强才⾏。

  • MyBatis⼊⻔简单,即学即⽤,提供了数据库查询的⾃动对象绑定功能,⽽且延续了很好的SQL使⽤经验,对于没有那么⾼的对象模型要求的项⽬来说,相当完美。

  • MyBatis的缺点就是框架还是⽐较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要⾃⼰写的,⼯作量也⽐较⼤,⽽且不太容易适应快速数据库修改

猜你喜欢

转载自blog.csdn.net/rod0320/article/details/123389319