写点什么

Hibernate 和 MyBatis 的区别比较

  • 2022 年 4 月 17 日
  • 本文字数:1448 字

    阅读完需:约 5 分钟

Hibernate 是当前最流行的 O/R mapping 框架,它出身于 sf.net,现在已经成为 Jboss 的一部分。 Mybatis 是另外一种优秀的 O/R mapping 框架。目前属于 apache 的一个子项目。


开发工作量


Hibernate 和 MyBatis 都有相应的代码生成工具。可以生成简单基本的 DAO 层方法。


针对高级查询,Mybatis 需要手动编写 SQL 语句,以及 R Java 开源项目【ali1024.coding.net/public/P7/Java/git】 esultMap。而 Hibernate 有良好的映射机制,开发者无需关心 SQL 的生成与结果映射,可以更专注于业务流程。


第三章 系统调优对比


Hibernate 的调优方案


制定合理的缓存策略;


尽量使用延迟加载特性;


采用合理的 Session 管理机制;


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


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


Mybatis 调优方案


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


SQL 优化方面


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


MyBatis 的 SQL 是自己手动写的所以调整方便。但 Hibernate 具有自己的日志统计。Mybatis 本身不带日志统计,使用 Log4j 进行日志记录。


扩展性方面


Hiberna 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 te 与具体数据库的关联只需在 XML 文件中配置即可,所有的 HQL 语句与具体使用的数据库无关,移植性很好。MyBatis 项目中所有的 SQL 语句都是依赖所用的数据库的,所以不同数据库类型的支持不好。


第四章 对象管理与抓取策略


对象管理


Hibernate 是完整的对象/关系映射解决方案,它提供了对象状态管理(state management)的功能,使开发者不再需要理会底层数据库系统的细节。也就是说,相对于常见的 JDBC/SQL 持久层方案中需要管理 SQL 语句,Hibernate 采用了更自然的面向对象的视角来持久化 Java 应用中的数据。


抓取策略


Hibernate 对实体关联对象的抓取有着良好的机制。对于每一个关联关系都可以详细地设置是否延迟加载,并且提供关联抓取、查询抓取、子查询抓取、批量抓取四种模式。 它是详细配置和处理的。


而 Mybatis 的延迟加载是全局配置的。


第五章 缓存机制对比


Hibernate 缓存


Hibernate 一级缓存是 Session 缓存,利用好一级缓存就需要对 Session 的生命周期进行管理好。建议在一个 Action 操作中使用一个 Session。一级缓存需要对 Session 进行严格管理。


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

最后

Java 架构进阶面试及知识点文档笔记


这份文档共 498 页,其中包括 Java 集合,并发编程,JVM,Dubbo,Redis,Spring 全家桶,MySQL,Kafka 等面试解析及知识点整理



Java 分布式高级面试问题解析文档


其中都是包括分布式的面试问题解析,内容有分布式消息队列,Redis 缓存,分库分表,微服务架构,分布式高可用,读写分离等等!



互联网 Java 程序员面试必备问题解析及文档学习笔记



Java 架构进阶视频解析合集

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
Hibernate和MyBatis的区别比较_Java_爱好编程进阶_InfoQ写作平台