hibernate与mybatis区别对比

hibernate与mybatis区别对比hibernate和mybatis区别对比

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

  • hibernate:全自动映射 ORM框架,不需要自己手动去写SQL语句

  • mybatis:半自动ORM框架,需要自己手动去写SQL语句

  • hibernate以及mybatis区别

    • 开发速度

    • 工作量对比: 针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。

    • sql优化方面

      • hibernate :查询语句会将所有字段都打印出来,会有一点点性能消耗,

      • mybatis:可以根据需求去查询需要的字段

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

    • 缓存机制

      • Hibernate

        • Hibernate一级缓存是Session缓存,利用好一级缓存就需要对Session的生命周期进行管理好。一级缓存需要对Session进行严格管理。

        • Hibernate二级缓存是SessionFactory级的缓存, 二级缓存称为进程级缓存或SessionFactory级缓存,它可以被所有session共享,它的生命周期伴随着SessionFactory的生命周期存在和消亡。

        • hibernate的二级缓存默认是不支持分布式缓存的。

        • 总结:一级缓存就是  Session 级别的缓存,在事务范围内有效是,内置的不能被卸载。二级缓存是 SesionFactory级别的缓存,从应用启动到应用结束有效。是可选的,默认没有二级缓存,需要手动开启

      • mybatis

        • 一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认打开一级缓存。

        • 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置<cache/> ;

        • 对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存Namespaces)的进行了C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear。

  • 总结

    • Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句。

    • Mybatis直接编写原生态sql,可以严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但需求变化要求迅速输出成果。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件,则需要自定义多套sql映射文件,工作量大。 

    • Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件,如果用hibernate开发可以节省很多代码,提高效率。 

  • Mybatis优势

    • MyBatis可以进行更为细致的SQL优化,可以减少查询字段。

    • MyBatis容易掌握,而Hibernate门槛较高。

  • Hibernate优势

    • Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。

    • Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。

    • Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。

    • Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216247.html原文链接:https://javaforall.net

(0)
上一篇 2025年7月11日 下午9:01
下一篇 2025年7月11日 下午9:43


相关推荐

  • claude code 快捷键

    claude code 快捷键

    2026年3月16日
    1
  • KNIME学习记录

    KNIME学习记录KNIME 的介绍 KNIME 的按钮说明 KNIME 的例子 KNIME 的注意事项 KNIME 的介绍 KNIME 发音为 naim 就是用 k 就像 knife 一样 它由康斯坦茨大学的 MichaelBerth 小组开发 KNIME 系统是基于 Eclipse 开发环境来精心开发的数据挖掘工具 无需安装 方便使用 KNIME 也是用 Java 开发的 可以扩展使用

    2026年3月19日
    3
  • 关于敏捷软件开发

    关于敏捷软件开发最近在看 对其中的原则和实践非常感兴趣 顺便记录下来 1 敏捷软件开发宣言 nbsp 个体和交互 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 胜过 nbsp nbsp 过程和工具 nbsp 可以工作的软件 nbsp 胜过 nbsp nbsp 面面俱到的文档 nbsp 客户合作 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 胜过 nbsp nbsp 合同谈判 nbsp 响应变化 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 胜过 nbsp nbsp 遵循计划 2 12 个原则 nbsp 2 1 我们最优先要做的是通过尽早的 持续的交付有价值的软件来使客户满意 nbsp 2

    2026年3月17日
    2
  • sql语言是编程语言吗_sql属于编程语言吗

    sql语言是编程语言吗_sql属于编程语言吗1.SQL操作的是数据   SQL是数据库的查询语言,因而可以对系统数据产生持久化影响。在常规编程中,一个错误通常只会造成程序的crash或bug,修改并重新调试往往就可以了;而在SQL中,一个不小心就可能造成系统数据的破坏和丢失。常常有新手执行SQL时,不小心遗漏了DELETE或UPDATE语句中的WHERE子句,这往往是很大的麻烦。   因此,学习和使用SQL,一开始应该养成两个习惯:

    2022年10月5日
    6
  • 6种iframe高度自适应的方法

    6种iframe高度自适应的方法js 自适应高度 实际上就是设置 iframe 的高度 设置等于内嵌网页的高度 从而看不到滚动条和嵌套痕迹 对于用户体验和网站美观起着重要作用 我们可以通过 css 来给它直接定义一个高度 同样可以

    2026年3月17日
    1
  • 网页设计css导航链接怎么做,如何用DIV+CSS制作导航条

    网页设计css导航链接怎么做,如何用DIV+CSS制作导航条一个蓝色主题的导航条布局案例,本CSS小实例,采用DIVCSS实现。同时不用图片做背景,直接使用背景色实现,鼠标经过悬停对应栏目名称是对应背景蓝色变深。一般导航条采用ulli列表布局,这里也不例外DIVCSS5实例也采用列表标签ulli+CSS布局。这样的导航条有以下二部分代码组成。1、CSS代码:ul#nav{width:100%;height:60px;background:#…

    2022年7月22日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号