Hibernate 和 MyBatis 的区别比较
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 架构进阶视频解析合集
评论