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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Intellij IDEA 2017 debug断点调试技巧与总结详解篇[通俗易懂]

    Intellij IDEA 2017 debug断点调试技巧与总结详解篇[通俗易懂]IntelliJIDEA使用教程(总目录篇)在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的,有的人keymap是mac版的,有的是Windows版的。我的就是Windows,而且修改keymap为eclipse的keymap,因为我算是eclips…

    2022年5月11日
    52
  • CTS测试方法「建议收藏」

    ①执行完整的CTS测试计划:runcts–planCTS②单独测试某一个Module:runcts–module/-m+modulename③单独测试某一Test下的方法:runcts–module/-m+modulename–test/-t+testname#methodname④F…

    2022年4月10日
    52
  • 百度云学习资源整合

    百度云学习资源整合关注微信公众号《IT技术资源共享》获取更多资源!微信号:feng1376311650或者扫二维码关注获取下面全部资源:python:【0001】Python安装包,教程文档,工具包链接:http://pan.baidu.com/s/1hsnHizM密码:9×03【0002】Python基础到高级视频教程链接:http://pan.baidu.com/s/1qYE5nOS密码:v0qfjava:【1101】java项目视频20套链接:…

    2022年5月11日
    105
  • 分布式 – 公司使用什么RPC框架,聊聊你理解的RPC原理

    分布式 – 公司使用什么RPC框架,聊聊你理解的RPC原理不啰嗦,我们直接开始!引言以前在做一个规模不大的系统的时候,用的是单体架构,一台服务器部署上一个应用和数据库也就够了。但是现代化互联网公司业务逐渐扩大,服务逐渐细分,很多服务之间需要通过远程分布式接口调用通讯,即不同的服务不是部署在同一个服务器上,比如订单服务在A服务上,付款服务在另一个服务上,有同步调用、也有异步调用,这个时候我们就需要远程调用不同的服务,使用的时候调用远程服务就像调用本地服务一样,引入一个jar包,就能通过this.xxx()一样调用远程服务,这背后的机制就是通.

    2022年5月12日
    33
  • Android 开发环境详细概述

    Android 开发环境详细概述理解AndroidApp开发环境搭建的部分以及他们之间如何联系,协调工作(会和理解为什么要去做,知其然知其所以然)掌握环境搭建的步骤掌握配置环境项的用途,以方便我们的开发操作Android开发组成Java+AndroidSDK+开发工具(IDE)Android的开发语言是Java,只有安装JDK才能让Java运行起来Android的SDK提供了运行和硬件开发环境Eclipse开发工具可以提高编…

    2022年7月23日
    12
  • BIOS 和UEFI的区别

    BIOS 和UEFI的区别BIOS 和UEFI的区别

    2022年4月22日
    44

发表回复

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

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