MyBatis 与Hibernate 有哪些不同?

SQLORM 的争论,永远都不会终⽌

开发速度的对比:

Hibernate的真正掌握要⽐Mybatis难些。Mybatis框架相对简单很容易上⼿,但也相对简陋些。
⽐起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项⽬需求去考虑究竟哪⼀个更适合项⽬开发,⽐如:⼀个项⽬中⽤到的复杂查询基本没有,就是简单的增删改查,这样选择hibernate效率就很快了,因为基本的sql语句已经被封装好了,根本不需要你去写sql语句,这就节省了⼤量的时间,但是对于⼀个⼤型项⽬,复杂语句较多,这样再去选择hibernate就不是⼀个太好的选择,选择mybatis就会加快许多,⽽且语句的管理也⽐较⽅便。

开发工作量的对比:

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

sql优化方面:

Hibernate的查询会将表中的所有字段查询出来,这⼀点会有性能消耗。Hibernate也可以⾃⼰写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。⽽Mybatis的SQL是 ⼿动编写 的,所以可以按需求指定查询的字段。

Hibernate SQL语句的调优需要将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⽅⾯需要你的经验和能⼒都很强才⾏。


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


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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图图是个好孩纸~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值