Mybatis的一级缓存机制简介
2024-08-27 11:25:05
1.接口
public interface MemberMapperCache { public Members selectMembersById(Integer id); }
2.配置文件xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dao.MemberMapperCache"> <select id="selectMembersById" resultType="members"> select * from members where id = #{id} </select> </mapper>
3.测试类
/**
* Mybatis的缓存机制
* 一级缓存(本地缓存)也叫sqlSession级别的缓存:与数据库同一次会话期间查询到的数据会放在本地缓存中,以后再获取相同的数据就没必要再去数据库中拿了
* 一级缓存失效的4种情况
* 1.sqlSession不同
* 2.sqlSession相同但是查询条件不同(很好理解)
* 3.sqlSession相同但是两次查询之间掺杂了相同数据的增删改操作
* 4.sqlSession相同但是两次查询之间清除了缓存(session.clearCache();)
*/
public static void main(String[] args) throws IOException {
SqlSession session = getSqlSession();
try {
// 面向接口方式
MemberMapperCache mapper = session.getMapper(MemberMapperCache.class);
Members member1 = mapper.selectMembersById(1);
Members member2 = mapper.selectMembersById(2);
System.out.println(member1.toString());
System.out.println(member2.toString());
session.commit();
} finally {
// 关闭session
session.close();
}
} public static SqlSession getSqlSession() throws IOException {
// 读取全局配置文件
String resource = "conf/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 获取sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 打开session
SqlSession session = sqlSessionFactory.openSession();
return session;
}
4.打印结果
==> Preparing: select * from members where id = ?
==> Parameters: 1(Integer)
<== Columns: id, member_name, pass_word, age
<== Row: 1, 张三, 123456, 25
<== Total: 1
Member [id=1, member_name=张三, password=123456, age=25]
Member [id=1, member_name=张三, password=123456, age=25]
两次相同查询可见只打印了一条sql语句,这就是本地缓存机制
5.清除缓存操作
MemberMapperCache mapper = session.getMapper(MemberMapperCache.class);
Members member1 = mapper.selectMembersById(1);
session.clearCache();
Members member2 = mapper.selectMembersById(1);
System.out.println(member1.toString());
System.out.println(member2.toString());
结果
==> Preparing: select * from members where id = ?
==> Parameters: 1(Integer)
<== Columns: id, member_name, pass_word, age
<== Row: 1, 张三, 123456, 25
<== Total: 1
==> Preparing: select * from members where id = ?
==> Parameters: 1(Integer)
<== Columns: id, member_name, pass_word, age
<== Row: 1, 张三, 123456, 25
<== Total: 1
Member [id=1, member_name=张三, password=123456, age=25]
Member [id=1, member_name=张三, password=123456, age=25]
发送了两条sql语句
最新文章
- EXCEL里面的数字显示为文本 不用科学计数法显示
- [OpenCV] 4、图像叠加 addWeighted
- zabbix(sql注入判断脚本)
- hdu2923 最短路floyd
- datagridview 用法
- Codeforces Round #366 (Div. 2) A
- http-equiv
- javascript面向对象--自定义类型
- mysqlsla慢查询分析工具教程
- C语言递归回溯法迷宫求解
- MFC窗口风格 WS_style/WS_EX_style
- [福大软工] Z班 第5次成绩排行榜
- html5-article元素
- [Word]让字符重合显示
- [转]CSS浏览器兼容问题总结
- log Log4NET配置
- R软件常用命令
- static作用(修饰函数、局部变量、全局变量)转自http://www.cnblogs.com/stoneJin/archive/2011/09/21/2183313.html
- 线程相关函数(3)-pthread_detach()将某个线程设成分离态
- 仿照Chome的GhostPage调试功能
热门文章
- [转帖]单集群10万节点 走进腾讯云分布式调度系统VStation
- SpringBoot项目集成PageHelper使用
- Anaconda中安装了Libtiff模块,但运行程序显示ModuleNotFoundError: No module named &#39;libtiff&#39;
- PAT(B) 1043 输出PATest(Java)统计
- AVR单片机教程——点亮第一个LED
- Linux中request_irq()中断申请与处理说明
- C++ new/delete详解及原理
- Bootsrap表格表单及其使用方法
- Redis—.Net中的使用
- git 讲解