MyBatis学习(二):Hibernate与MyBatis的区别

由于我已经不是第一次接触这两个框架了,面试中也经常问到这两个问题,所以在这里写下自己的一些理解。

首先从全自动和半自动开始说起,网上经常有人说MyBatis和Hibernate一个全自动的ORM映射框架,一个是半自动的ORM框架、那么究竟体现在哪里

一切还要从JDBC说起,我们通常知道JDBC的实现步骤包括获取连接,创建Statement,传递查询字段,执行SQL,获取结果集,映射结果集,释放连接。

MyBatis封装:

  1. MyBatis封装了获取连接,执行Sql,关闭连接。
  2. Sql传递的时候类的属性自动传递参数,不用再自己去写statement
  3. 结果集也由MyBatis来映射。不用手动实现。但是要配置和编写ResultMap

Hibernate封装:

  1.  HIbernate封装了数据连接,Sql编写,执行Sql,关闭连接
  2. SQL参数的传递
  3. 完全封装了结果集的映射

由此可见Hibernate相对于Batis更加自动一点。

区别:

  • Hibernate简化了持久层的开发封装了结果集映射,MyBatis需要自己去配置结果集映射ResultMap
  • MyBatis需要去自己编写Sql.Hibernate封装了Sql的拼接

优劣:

当然要谈优劣的话,

MyBatis优点:

1、个人觉得MyBatis的封装在一定程度下,增加了SQL的灵活性。在一些精细化和复杂Sql优化的地方使用更好。

2、可以通过标签自定义动态Sql对于批量的数据的删除修改增加比较友好。Hibernate可以编写HQL来定制Sql但是这样一来就使得开发过程反而更复杂,违背初衷。

Hibernate优点

1、而Hibernate不用编写Sql一定程度上也简化了开发,让人们更加专注于Service层逻辑实现,提高了开发的效率,对于简单的CRUD比较友好。

2、Mybatis的框架相对于Hibernate也比较简陋。版本迭代Hibernate比较活跃

3、Hibernate可以通过变更配置来更换数据库,Hibernate的数据库移植性更好

 

总结:Hibernate简化了持久层的开发封装了结果集映射,将面向对象进行到底,而不需要太关注实现细节。MyBatis是一个灵活的工具拿来即用,需要关注更多实现的细节。

Hibernate的优化建议;

  1. .尽量使用many-to-one,避免使用单项one-to-many
  2. .灵活使用单向one-to-many
  3. .不用一对一,使用多对一代替一对一
  4. .配置对象缓存,不使用集合缓存
  5. .一对多使用Bag 多对一使用Set
  6. .继承使用显示多态  HQL:from object  polymorphism="exlicit" 避免查处所有对象
  7. .消除大表,使用二级缓存

 

 

 

    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值