千家信息网

MyBatis一级缓存会遇到什么坑

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关MyBatis一级缓存会遇到什么坑,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一级缓存概念当我们使用Mybatis进行数据库的操作时候
千家信息网最后更新 2026年11月03日MyBatis一级缓存会遇到什么坑

这篇文章将为大家详细讲解有关MyBatis一级缓存会遇到什么坑,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一级缓存概念
当我们使用Mybatis进行数据库的操作时候,会创建一个SqlSession来进行一次数据库的会话,会话结束则关闭SqlSession对象。那么一个SqlSession的生命周期即对应于Mybatis的一次会话。在Mybatis的一次会话中,我们很有可能多次查询完全相同的sql语句,如果不采取措施的话,每一次查询都查询一次数据库。而一次会话时间一般都是极短的,相同Sql的查询结果极有可能完全相同。由于查询数据库代价是比较大的,这会导致系统的资源浪费。

为了解决这个问题,Mybatis对每一次会话都添加了缓存操作。这个缓存的作用域为一次会话中。缓存随着会话(SqlSession)的创建而产生,随着会话结束而释放。对一次会话的查询操作,总是先查看缓存中是否存在查询结果,如果存在则直接取缓存中的结果,不存在则查询数据库。这样的话,一次会话中的完全相同的查询则只会查询一次,节省了系统资源。

引言

MyBatis 一级缓存(MyBaits 称其为 Local Cache)无法关闭,但是有两种级别可选:

package org.apache.ibatis.session;/** * @author Eduardo Macarron */public enum LocalCacheScope { SESSION, //session 级别的缓存 STATEMENT //statement 级别的缓存}

1)session 级别的缓存

在同一个 sqlSession 内,对同样的查询将不再查询数据库,直接从缓存中。

验证代码:

[

public static void main(String[] args) throws IOException { InputStream inputStream = new ClassPathResource("mybatis.xml").getInputStream(); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); UserDao mapper = sqlSession.getMapper(UserDao.class); System.out.println(mapper.get(1L)); System.out.println("-------------------"); System.out.println(mapper.get(1L));}

输出:

日志输出可以看到,第一次查询通过数据库查询,第二次则没有,直接通过缓存读取。

坑:这种缓存策略有一个坑,在服务集群时就会出现问题。

假设现在有一个服务集群,有两个节点。

首先,两个节点都进行了同样的查询,两个节点都有自己的一级缓存,后续同样的查询,两个节点将不再查询数据库。

如果此时节点 1 执行了 update 语句,那么节点 1 的一级缓存会被刷新,而节点 2 的一级缓存不会改变。

2)statement 级别的缓存

避坑: 为了避免这个问题,可以将一级缓存的级别设为 statement 级别的,这样每次查询结束都会清掉一级缓存。MyBatis 源码如下:

在 MyBatis 的配置文件中,添加以下配置:

验证代码和上面的一样不变。

输出:

可以看到,即使是同样的查询,每次查询都是直接读取数据库了。

避坑完毕。

缓存是不可能不要缓存的,这个时候,就需要使用缓存中间件了,由缓存中间件管理缓存。

关于"MyBatis一级缓存会遇到什么坑"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

缓存 查询 数据 数据库 级别 节点 相同 两个 篇文章 结果 问题 输出 中间件 代码 时候 更多 系统 语句 资源 集群 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司 金融科技创新监管互联网金融 互联网科技集团 奇酷互联网络科技公司 火传媒上海互联网科技 互联网科技网站 海南购全球互联网科技 太原新华互联网科技学校怎么样 湖南诚度互联网科技有限公司 互联网科技扶贫时间 用友工业互联网科技发展 山东子淼互联网科技有限公司 广州千川互联网科技有限公司 江苏互联网科技小贷 云鲸互联网络科技有限公司 福仕德教育科技互联网 米泉互联网科技专业怎么样 互联网科技创新创业项目 北京品多多互联网科技有限公司 互联网科技企业文化 互联网科技公司经营范围 互联网科技战争 智网互联网科技 深圳市运趣互联网科技有限公司 济南华为互联网科技产业总部基地 厦门比较好的科技互联网公司 明优互联网科技有限公司 有人说阿里系是互联网科技企业 35岁以上互联网科技行业 北京品多多互联网科技有限公司
0