ORM: 即Object Relation Mapping,即对象关联映射。所以ORM就是将Java中的对象和数据库中的表关联对应起来。

思考一下Mybatis,Mybatis相当于将mapper中的入参和出参结果集封装到java的POJO类中,听上去好像就是ORM啊?!

但是实际上Mybatis是半ORM,它鼓励开发人员自己去写sql,也正是因为sql语句要自己写,所以Mybatis是将java方法与sql语句关联起来,而没有将java对象与数据库关联起来。

这样Mybatis的好处就是如果我们懂得sql开发和调优,我们就可以对sql进行更好的管理和优化,同时,我们也可以充分利用数据库的各种功能,比如存储视图以及各种复杂的查询及某些数据库的专有特性。有好处的同时也有坏处啊,因为要自己写sql,所以在面对众多的数据库时,通过这种方式会导致平台的可移植性并不是很高。

说了半天那么有没有真`ORM框架呢?
到这我们就不得不把另外一位请出来了,Hibernate~
上文说道Mybatis是非常流行的ORM框架,主要着力点在于POJO 与SQL之间的映射关系。
那么Hibernate也是非常流行的ORM框架,通过对数据对象的操作为数据库结构提供了较为完整的封装。
所以通过说Mybatis和ORM的区别就引到了Mybatis和Hibernate区别。


接下来说一下Mybatis和Hibernate的区别

  1. 主要区别比较
    Mybatis是将java方法和sql语句进行关联,半自动,Hibernate则是java对象和数据库进行关联,全自动。Mybatis需要自己动手编写SQL语句及resultMap等,而Hibernate通过映射机制让我们不再关注SQL的生成和结果映射,可以更集中关注于业务。
  2. 开发难度
    Mybatis的开发难度要比Hibernate低,因为Mybatis需要我们写的SQL,大多数的程序员应该在学校的时候就开始写SQL了,而后期直接在SQL的基础上进行调优也是很亲切熟悉有思路的。
    而Hibernate则需要通过大量的配置使框架自动对数据库进行发送sql语句,从而完成我们想要进行的数据库操作,虽然Hibernate也可以自己写SQL来制定需要查询字段,但是这就破坏了框架的特性了。
  3. 移植性
    通过上面开发难度的对比,其实就可以带到他的移植性对比上了,Mybatis易上手,自己写SQL,但是我们自己写的SQL毕竟还是和我们当时所依赖的数据库相关,所以SQL与数据库的耦合性导致了如果写的SQL与很多数据库不通用的话就会导致Mybatis的可移植性下降很多。
    而Hibernate其强大的映射结构和HQL就降低了对象与各个数据库的耦合性,Hibernate与数据库的具体关联都写在XML中,所以HQL就对我们当前用的什么数据库或者以后要用什么数据库不是很care了。
  4. 日志系统
    Mybatis没有日志统计的功能,所以需要借助log4j,而HIbernate就有日志统计并且其日志系统非常健全,包括SQL记录、关系异常、缓存提示、优化警告脏数据警告等。
  5. SQL优化
    Mybatis是自己手写SQL,SQL写在XML中或注解中,既然能写SQL那么也得自己来优化SQL,优化的方式就和SQL优化方式一样,所以在使用Mybatis的时候你只需要思考你应该如何优化你的SQL。
    Hibernate在SQL优化方面则是比较困难了,Hibernate的概念中Java对象拥有三种状态。瞬时状态,游离状态,持久状态,当这些状态发生改变时,Hibernate框架会自动的对数据库发送sql语句,从而完成对数据库的操作。因为Hibernate有QBC,HQL,SQL三种查询方式,其SQL很多都是自动生成的,我们没有办法较为直接的去维护SQL这意味着我们在SQL语句优化时会遇到一定的困难。
  6. 缓存机制
    MyBatis的二级缓存配置是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。Mybatis使用二级缓存时需要特别小心。如果不能完全确定数据更新操作的波及范围,避免Cache的盲目使用。否则,脏数据的出现会给系统的正常运行带来很大的隐患。
    Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存,对查询对象有着良好的管理机制,用户无需关心SQL。所以在使用二级缓存时如果出现脏数据,系统会报出错误并提示。

当然二者也不全是不同,接下来说一下两者的相同之处。
Mybatis和Hibernate都运用了ORM的思想,都Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期差不多并且Hibernate和MyBatis都支持JDBC和JTA事务处理,其二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。


优略势总结

Mybatis优势

  • Mybatis入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。
  • MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
  • 缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
  • 二级缓存机制不佳。

Hibernate优势

  • Hibernate的数据库无关性好,O/R映射能力强,功能强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
  • Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
  • Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
  • Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

形象比喻(这个比喻真的太好了)

  • mybatis:机械工具,使用方便,拿来就用,但工作还是要自己来作,不过工具是活的,怎么使由我决定。
  • hibernate:智能机器人,但研发它(学习、熟练度)的成本很高,工作都可以摆脱他了,但仅限于它能做的事。

参考
https://www.zhihu.com/question/21104468
https://baijiahao.baidu.com/s?id=1598595163822471051&wfr=spider&for=pc
https://blog.csdn.net/qq_41378597/article/details/88070335
https://www.cnblogs.com/lixuwu/p/10941649.html
https://www.zhihu.com/question/21104468

MyBatis和ORM的区别以及Mybatis和Hibernate的区别相关推荐

  1. 面试之mybatis和hibernate的区别

    mybatis是支持普通SQL查询.存储过程和高级映射的优秀持久层框架.封装了 几乎所有的JDBC代码和参数的手工设置 ,以及结果集的检索: 封装了:1,获取连接,执行sql,释放连接. 2,sql的 ...

  2. ADO.NET与ORM的比较(5):MyBatis实现CRUD

    说明:这是一个系列文章,在前面的四篇当中周公分别讲述了利用ADO.NET.NHibernate.Linq to SQL及EntityFramework来实现CRUD功能(C:Create/R:Read ...

  3. MyBatis和hibernate本质区别与应用场景

    1.Hibernate:是一个标准的ORM框架(对象关系映射),不需要写sql,自动生成sql      使用hibernate对SQL优化修改比较困难      应用场景:        适用于需求 ...

  4. mybatis.net mysql_ADO.NET与ORM的比较(5):MyBatis实现CRUD

    说明:这是一个系列文章,在前面的四篇当中周公分别讲述了利用ADO.NET.NHibernate.Linq to SQL及EntityFramework来实现CRUD功能(C:Create/R:Read ...

  5. mybatis和hibernate的区别---Mybatis的学习笔记(四)

    具体说明: Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将 ...

  6. 开课吧Java:MyBatis和Hibernate的区别

    Hibernate 和 MyBatis 都是目前业界中主流的对象关系映射(ORM)框架,它们的主要区别如下. 1)sql 优化方面 Hibernate 使用 HQL(Hibernate Query L ...

  7. Mybatis框架-----ORM是什么

    Mybatis框架------ORM是什么 文章目录

  8. 面试问题:MyBatis和Hibernate的区别

    1.sql 优化方面 Hibernate 使用 HQL(Hibernate Query Language)语句,独立于数据库.不需要编写大量的 SQL,就可以完全映射,但会多消耗性能,且开发人员不能自 ...

  9. mybatis和hibernate的区别优缺点对比

    第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉得要用好Mybatis还是首先要先理解好H ...

最新文章

  1. 【微信小程序企业级开发教程】小程序的配置详解
  2. 解决网络故障的一般方法
  3. 容器源码解析之容器全貌(一)
  4. android wifi热点项目总结,高通Android wifi移植和wifi热点问题总结
  5. C#LeetCode刷题之#566-重塑矩阵( Reshape the Matrix)
  6. 星河经纬加入会员可靠吗_星河湾外墙防水补漏 星河湾外墙防水补漏公司 星河湾外墙防水补漏师傅 星河湾外墙防水补漏施工队电话...
  7. @程序员,Web 开源神器了解一下? | 程序员硬核评测
  8. php self this static,php面向对象中self和static的区别
  9. SPSS数据编码(图文+数据集)【SPSS 008期】
  10. sourceTree git工作流无法结束
  11. CPU226怎么与西门子变频器通讯
  12. 零基础学FPGA(二):FPGA生产厂家及产品(呕心沥血,小白如何选择板卡)
  13. C语言malloc函数详解(通俗易懂)
  14. 我的2016--远方不一定有诗,但有更好的自己
  15. 资治通鉴-6 听的智慧
  16. Mac获取系统版本、机型
  17. 如何下载全球范围的谷歌卫星地图数据
  18. python计算分位数方法
  19. React打包出现:The project was built assuming it is hosted at ./.
  20. IT 猎头分享---找工作前你真得想清楚离职原因了吗?

热门文章

  1. Python 从入门到放弃之实现 ls 功能
  2. 微信公众号授权手机端可以,电脑端显示空白
  3. Hudi on Flink上手使用总结
  4. Markdown插入网络图片CSDN图片
  5. 欧洲气象中心ECMWF中期、ERA数据下载软件
  6. 会计记忆总结之十:主要经济业务事项账务处理
  7. Miracast概述(一)
  8. 被裁员60%, 以太坊大神忍不住要洗白了
  9. Python函数模板
  10. 追踪算法【亟待解决】