Mybatis-一级缓存
1.Myabis的一级缓存
一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就 会从缓存中直接获取,不会从数据库重新访问
使一级缓存失效的四种情况:
1) 不同的SqlSession对应不同的一级缓存
2) 同一个SqlSession但是查询条件不同
3) 同一个SqlSession两次查询期间执行了任何一次增删改操作
4) 同一个SqlSession两次查询期间手动清空了缓存
举例:
同一个sqlSession方法同一个方法,只执行一次sql语句
查看结果:
可以看到只执行了一次sql语句 ,说明第二次查询时是从一级缓存中得到数据
同一个SqlSession两次查询期间执行了任何一次增删改操作
同一个sqlSession方法同一个方法,两次查询之间执行了任何一次增删改操作
查看结果:
可以看到 ,当两次相同查询语句之间执行了一次增删改操作,一共执行了三次sql语句,说明第二次查询时没有从一级缓存中取数据
同一个SqlSession但是查询条件不同
当同一个sqlSession执行同一个方法时,参数不一样时,第二次查询没有从一级缓存中获得数据
查看结果:
可以看到一共执行力两次sql语句,因为同一方法,不同参数
同一个SqlSession两次查询期间手动清空了缓存
在两次相同查询两个相同参数时,第一次查询完结果时清除缓存
查看结果:
可以看到当第一次查询完结果时清除缓存,一级缓存失效,第二次查询时执行了sql语句
不同的SqlSession对应不同的一级缓
通过工具类创建两个sqlSession时,两次相同查询参数相同时
查看结果:
可以看到,执行了两次sql语句,说明一级缓存失效
工具类编写
package com.hrf.Utils; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class MybatisUtils { private static SqlSessionFactory factory= null; static { String config="Mybatis.xml"; try { InputStream in = Resources.getResourceAsStream(config); factory = new SqlSessionFactoryBuilder().build(in); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession getSqlSession(){ SqlSession session = null; if (factory != null){ session =factory.openSession(true); } return session; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!