hibernate与mybatis区别对比

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

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


相关推荐

  • window10怎么提供管理员权限删除文件_如何用管理员权限删除文件

    window10怎么提供管理员权限删除文件_如何用管理员权限删除文件http://www.xitongcity.com/jiaocheng/win8_content_3473.html很多win8.1系统用户在对磁盘文件进行清理时,经常会遇到“文件夹访问被拒绝,您需

    2022年8月1日
  • 使用python语言编写常见的文本分类算法

    使用python语言编写常见的文本分类算法    自然语言处理中一个很常见的操作就是文本分类,比如一组新闻文本,通过分类模型,将新闻文本分为政治、体育、军事、娱乐、财经等等几大类。那么分类第一步就是文本向量化,前一篇博客讲了一些,本文可以说是前文的实践版本。本文主要介绍一些常见的文本分类模型,说是介绍,其实主要以代码和结果为主,并不会详细的介绍每个算法的思想、原理、推导过程等,那样的话,估计可以写一个7、8篇的系列了,另外我也发现很…

    2022年6月6日
  • validationengine如何自定义验证信息_analytical engine

    validationengine如何自定义验证信息_analytical engineValidationEngine是一款基于Jquery的js表单验证插件。相对于之前的传统表单验证工具,其优点是自定义验证内容更广泛以及与AJAX的方便整合。附件提供了该插件,解压密码为:im486,Js目录下为ValidationEngine所需js文件(不包括jquery),css目录下的validationEngine.jquery.css为本插件样式文件,demo为示例文件(其

    2022年10月4日
  • vb 随机数_vb随机产生一个范围的数

    vb 随机数_vb随机产生一个范围的数[代码]

    2022年8月4日
  • Jenkins入门(一)

    Jenkins入门(一)25.1CI/CD介绍互联网软件的开发和发布,已经形成了一套标准流程,假如把开发工作流程分为以下几个阶段:编码→构建→集成→测试→交付→部署正如你在上图中看到,持续集成(ContinuousIntegration)、持续交付(ContinuousDelivery)和持续部署(ContinuousDeployment)有着不同的软件自动化交付周期。持续集成(C…

    2022年6月2日
  • js算法初窥05(算法模式02-动态规划与贪心算法)

    在前面的文章中(js算法初窥02(排序算法02-归并、快速以及堆排)我们学习了如何用分治法来实现归并排序,那么动态规划跟分治法有点类似,但是分治法是把问题分解成互相独立的子问题,最后组合它们的结果,而

    2022年3月25日

发表回复

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

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