李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 每日心情
  • Now
  • 系列文章
  • 论坛
  • 左邻右舍
    • 左邻右舍
    • 博友圈
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • 网站地图
    • 网站统计
    • 另一个网站
    • 我的导航站
    • 赞助
  • 🚇开往
!Destiny
惟坚韧者始能遂其志
  1. 首页
  2. 中间件
  3. 正文

Hibernate、MyBatis的简介、区别以及优化

2019年8月20日 约 1,207 字5 分钟 176 0 0
本文最后更新于 2025年11月20日,距今已 307 天,其中的信息可能已经发生变化,请注意甄别。

简介:

Hibernate:ORM(对象关系映射)框架之一,对JDBC提供了比较完整的封装。Hibernate的O/R Mapping实现了POJO和数据库表之间的映射,以及SQL的自动生成和执行。

MyBatis:ORM框架之一,主要着力点在于POJO和SQL之间的映射关系。通过映射配置文件,将SQL所需的参数以及返回的结果字段映射到指定POJO。相对于Hibernate的O/R Mapping,MyBatis是一种SQL Mapping的实现。

 

对比:

1、开发

难易度:

Hibernate的真正掌握要比MyBatis困难,Hibernate要比MyBatis更加重量级些

MyBatis框架相对简单容易上手,但也相对简陋

开发工作量:

Hibernate和MyBatis都有对应的代码生成工具,可以生成基本的DAO层方法

MyBatis需要我们手动编写SQL语句,回归最原始的方式,所以可以按需求指定查询字段,提高查询效率

2、数据库移植性

MyBatis由于所有SQL都是依赖数据库编写的,所以扩展性、迁移性比较差

Hibernate与数据库具体的关联都在XML中,HQL对具体是什么数据库并不是很关心

3、缓存机制

Hibernate缓存

Hibernate一级缓存是session缓存,利用好一级缓存就需要对session的生命周期进行管理好,

Hibernate的二级缓存是SessionFactory级的缓存,SessionFactory的缓存分为内置缓存和外置缓存。内置缓存中存放的是SessionFactory对象的一些集合属性包含的数据(映射元素据及预定SQL语句等),对于应用程序来说,它是只读的。外置缓存中存放的是数据库数据的副本,其作用和一级缓存类似.二级缓存除了以内存作为存储介质外,还可以选用硬盘等外部存储设备。二级缓存称为进程级缓存或SessionFactory级缓存,它可以被所有session共享,它的生命周期伴随着SessionFactory的生命周期存在和消亡。

MyBatis缓存

MyBatis包含一个非常强大的查询缓存特性,可以非常方便的配置和定制。

MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。

二者由于缓存引发的脏数据问题

因为Hibernate对查询对象有着良好的管理机制,用户无需关心SQL。所以在使用二级缓存时如果出现脏数据,系统会报出错误并提示。

而MyBatis在这一方面,使用二级缓存时需要特别小心。如果不能完全确定数据更新操作的波及范围,避免Cache的盲目使用。否则,脏数据的出现会给系统的正常运行带来很大的隐患。

4、调优方案

Hibernate的调优方案:

1.制定合理的缓存策略;

2.尽量使用延迟加载特性;

3.采用合理的Session管理机制;

4.使用批量抓取,设定合理的批处理参数(batch_size);

5.进行合理的O/R映射设计

Mybatis调优方案:

MyBatis在Session方面和Hibernate的Session生命周期是一致的,同样需要合理的Session管理机制。MyBatis同样具有二级缓存机制。MyBatis可以进行详细的SQL优化设计。

5、SQL优化

Hibernate的查询会将表中所有的字段查询出来,会有性能损耗。Hibernate也可以自己写SQL来制定需要查询的字段,但是这样就破坏了Hibernate开发的简洁性。而MyBatis是手动编写SQL的,可以按照需求指定查询的字段。

6、日志

Hibernate拥有完整的日志系统,包括:SQL记录、关系异常、优化警告、缓存提示、脏数据警告等;而MyBatis除了基本的记录功能外,功能薄弱很多。

 

总结

MyBatis:

简单、易上手、更加灵活、适合复杂SQL查询、半自动、可以进行更为细致的SQL优化、工作量比较大,底层的SQL需要自己写、二级缓存机制不佳

Hibernate:

强大、方便、移植性好、更好的二级缓存机制、健全的日志系统、全自动、复杂、学习门槛高

 

 

除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/zhong-jian-jian/813

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

Hibernate、MyBatis的简介、区别以及优化

也可使用浏览器菜单中的「分享」功能

微信扫一扫分享

标签: Hibernate JAVA MyBatis SQL
最后更新:2025年11月20日

岁月同一天 9 月 23 日

回望过去的今天,你在写什么

  • 代码人生
    1 年前 2025年9月23日
    Consul开启transparent-proxy访问外部资源的时候,请求偶发Connection reset问题分析

    在Consul中启用透明代理(Transparent Proxy)后,访问外部资源出现偶发Connection rese…

  • 其他
    7 年前 2019年9月23日
    Idea激活码

    2020.4.21到期 亲测有效 812LFWMRSH-eyJsaWNlbnNlSWQiOiI4MTJMRldNUlNI…

相关文章
  • RocketMQ入门级教程2022年8月16日
  • 我要狠狠的反驳“公司禁止使用 Lombok ”的观点!2021年3月3日
  • JAVA线程池简析(JDK1.6)2019年6月13日
  • 架构师究竟比高级开发厉害在哪?2019年11月6日
  • 内存屏障浅析2021年11月18日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

还没有评论,快来抢沙发吧~

昨夜星辰昨夜风,画楼西畔桂堂东。
身无彩凤双飞翼,心有灵犀一点通。
隔座送钩春酒暖,分曹射覆蜡灯红。
嗟余听鼓应官去,走马兰台类转蓬。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
Redis7+&8.X 全新进阶系列(02):Redis Functions 详解——替代Lua脚本的官方轻量化函数方案 Redis7.x&8.x 全新进阶系列(01):划时代升级总览——从6.x到7.x/8.x全版本变革全景 让WordPress静态化之Rocket‑Nginx WordPress下一代默认主题Ipsum预览 C++之父重磅发声:AI编程正在毁掉一代程序员 支撑全网40%网站的WordPress正在重新拥抱PHP生态
关于主题加载速度优化的一点儿小演进给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能WordPress缓存插件WP Fastest Cache、WP Rocket 、FlyingPress对比关于使用AI的一些思考WordPress下一代默认主题Ipsum预览Kratos+ v1.1.16版本更新说明
动态线程池框架DynamicTp使用以及架构设计 nginx反向代理配置去除前缀 我项目中的代码都是如何分层的? 深入了解PostgreSQL 【PostgreSQL 15】PostgreSQL 15对UNIQUE和NULL的改进 Everything Claude Code 详细使用文档
最近评论
李锋镝 发布于 22 小时前(09月22日) 是的,换风格了,不过我觉得之前的年份命名挺好的,一看就知道哪一年的
obaby 发布于 1 天前(09月22日) 我现在是个假的wp了,哈哈哈 wp终于改了主题的命名风格了
李锋镝 发布于 3 天前(09月20日) 静态博客我之前也用过,但是感觉不是很方便,后来就一直用的WordPress
Sheep5 发布于 3 天前(09月20日) 我直接用静态博客,天然有速度优势。
不凡 发布于 3 天前(09月20日) 主要是wordpress插件丰富,需要什么功能插件,插件市场应有尽有,typecho是性能更好、更轻...
标签聚合
AI Spring WordPress Redis 多线程 MySQL 数据库 日常 IDEA AI编程 JAVA Theme ElasticSearch JVM 架构 SQL Claude K8s 分布式 SpringBoot
友情链接
  • 临窗旋墨
  • 志文工作室
  • 韩情脉脉
  • Mr.Sun的博客
  • 老张博客
  • 懋和道人
  • Honesty
  • 哥斯拉
  • 若梦博客
  • 瓦匠个人小站
  • sssr7844的博客
  • 搬砖日记
  • lijie blog
  • 皮皮社
  • 彬红茶日记
  • 蜗牛工作室
  • Serendipity
  • 知向前端
  • 林羽凡
  • 韩小韩博客

COPYRIGHT © 2016-2026 lifengdi.com. ALL RIGHTS RESERVED.

lifengdi.com

Domain age badge for lifengdi.com

Theme Kratos-plus By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号