前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyBatis和Hibernate的区别,及MyBatis的缓存机制了解吗

MyBatis和Hibernate的区别,及MyBatis的缓存机制了解吗

作者头像
@派大星
发布2024-02-22 12:22:51
1610
发布2024-02-22 12:22:51
举报
文章被收录于专栏:码上遇见你码上遇见你

MyBatis和Hibernate的区别

概要

Hibernate和MyBatis都是ORM框架,都支持JDBC和JTA事务处理,它们创建地目的都是为了简化Java原生程序操作数据库地步骤。增加开发者地效率。

两者的不同点
  1. Hibernate是全自动的,MyBatis是半自动的。在Hibernate中,开发者只需要定义好数据的表字段和Java DO的映射关系和规则即可,Hibernate会开放出来接口自动去处理数据库表的CRUD,并按照规定好的而规则映射到DO对象中,这个过程中操作者是完全不需要感知SQL逻辑的,但是在MyBatis中则完全不是这样,MyBatis不会帮助开发者编写SQL逻辑,MyBatis只会按照定义好的规则将数据库字段映射到Java的DO中,但是具体的SQL逻辑还是需要开发者自己编写。
  2. 正式因为MyBatis需要自己编写SQL逻辑,这是一个包袱,因为开发者需要根据不同的DB,选择不同的SQL语句(DB的移植性不高),而且正是因为要自己写SQL,项目初期的开发工作量要比Hibernate要大。但是这也是优点,通过MyBatis开发者就可以自定义SQL,比如:多表join操作等等。
  3. Hibernate的缓存系统更优于MyBatis,如果二级缓存出现脏数据,Hibernate会直接报错,但是MyBatis就需要开发者自己感知。

总的来说,MyBatis是一个小巧、方便、高效、简单、直接、半自动化的持久层框架,Hibernate是一个强大、方便、高效、复杂、间接、全自动化的持久层框架。

如何选择

对于性能要求不苛刻的系统,比如管理系统、ERP等推荐使用Hibernate,而对于性能要求高,响应快、灵活的系统则推荐使用MyBatis。

MyBatis缓存机制

首先MyBatis的缓存机制有两种:一级缓存和二级缓存。

一级缓存

在同一个会话中,MyBatis会将执行过的SQL语句的结果缓存到内存中,下载再次执行相同的SQL语句时,会先查看缓存中是否存在该结果,如果存在则直接返回缓存中的结果,不用再执行SQL语句。一级缓存默认是开启的状态,可以通过在MyBatis的配置文件中设置禁用活刷新缓存来控制缓存的使用。

工作流程如下:

image

对于一级缓存,有两点需要注意:

  1. MyBatis一级缓存内部设计简单,只是一个没有容量限定的HashMap,在缓存的功能上有所欠缺。
  2. MyBatis的一级缓存最大范围时SqlSession内部,有多个SqlSession或者分布式的环境下,数据库写操作会引起脏数据的问题。换句话说,当一个SqlSession查询并缓存结果后,另一个SqlSession更新了该数据,其他缓存结果里的SqlSession是看不到最新更新的数据的,所以建议设定缓存级别为Statement
二级缓存

二级缓存是基于命名空间的缓存,它可以跨会话,在多个会话之间共享缓存,可以减少数据库的访问次数。要使用二级缓存,需要在MyBatis的配置文件中配置相应的缓存实现类,并在需要使用缓存的Mapper接口上添加@CacheNamespace注解。二级缓存的使用需要注意缓存的更新和失效机制,以及并发问操作的问题。

工作流程如下:

image

因为二级缓存是基于namespace的,所以一般情况下,MyBatis的二级缓存是不是和多表查询的情况的。举个例子:

我们有两个表:student和class,我们为这两个表创建可两个namespace去对这两个表做相关的操作。同时,为了进行多表查询,我们在namespace=student的空间中,对student和class两张表及逆行了关联查询操作(sqlA)。此时就会在namespace=student的空间中把sqlA的结果缓存下来,如果我们在namespace=class下更新了class表,namespace=student是不会更新的,这就会导致脏数据的产生。

好了,本章节到此告一段落。希望对你有所帮助,祝学习顺利。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-02-14,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 码上遇见你 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MyBatis和Hibernate的区别
    • 概要
      • 两者的不同点
        • 如何选择
        • MyBatis缓存机制
          • 一级缓存
            • 二级缓存
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
            http://www.vxiaotou.com