Mybatis的一级缓存机制简介
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语句
Mybatis的一级缓存机制简介的更多相关文章
- MyBatis的一级缓存和二级缓存简介笔记
关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...
- spring管理hibernate,mybatis,一级缓存失效原因
mybatis缓存:一级缓存和二级缓存 hibernate缓存:一级缓存和二级缓存 关于缓存: 缓存是介于物理数据源与应用程序之间,是对数据库中的数据复制一份临时放在内存中的容器, 其作用是为了减少应 ...
- 《深入理解mybatis原理6》 MyBatis的一级缓存实现详解 及使用注意事项
<深入理解mybatis原理> MyBatis的一级缓存实现详解 及使用注意事项 0.写在前面 MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓 ...
- 《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项
MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓存机制上.MyBatis提供了一级缓存.二级缓存 这两个缓存机制,能够很好地处理和维护缓存,以提高系统的性能.本 ...
- mybatis深入理解(五)-----MyBatis的一级缓存实现详解 及使用注意事项
0.写在前面 MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓存机制上.MyBatis提供了一级缓存.二级缓存 这两个缓存机制,能够很好地处理和维护缓存,以提高 ...
- 【面试普通人VS高手系列】说一说Mybatis里面的缓存机制
一个工作了 5年的程序员,在私信里面不断向我诉苦. 他说,他用了Mybatis这么久,怎么滴也算是精通Mybatis了吧. 结果竟然在Mybatis这个面试题上翻车了! 真的好烦! 好吧,我们今天来看 ...
- [原创]关于mybatis中一级缓存和二级缓存的简单介绍
关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...
- SSM-MyBatis-17:Mybatis中一级缓存(主要是一级缓存存在性的证明,增删改对一级缓存会造成什么影响)
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 缓存------------------------------------------> 很熟悉的一个 ...
- 关于mybatis中一级缓存和二级缓存的简单介绍
关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...
随机推荐
- mysql备份时过滤掉某些库 以及 去掉"Warning: Using a password on the command line interface can be insecure."提示信息
在对mysql进行完整备份时使用--all-database参数 # mysqldump -u root -h localhost -p --all-database > /root/all.s ...
- KEGG富集分析散点图.md
输入数据格式 pathway = read.table("kegg.result",header=T,sep="\t") pp = ggplot(pathway ...
- [bzoj4240]有趣的家庭菜园_树状数组
有趣的家庭菜园 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=4240 数据范围:略. 题解: 第一步比较简单,只需要排序之后,每个数不是在左边就 ...
- Mybatis笔记4
mybatis中多对多的步骤 示例:用户和角色,一个用户可以有多个角色,一个角色可以赋予多个用户 步骤: 建立两张表:用户表,角色表,让用户表和角色表具有多对多的关系,需要使用中间表,中间表中包含两张 ...
- python第一天---我要入个门
""" 一个用户登录的案例 """ # 永远等待,直到用户输入值 # 变量 name_r = input("请输入用户名" ...
- Github相关问题集锦
问题 对于我们国内用户,有时候浏览器在进入github网站时,会出现无法加载或加载很慢的问题,针对这一问题,很是头疼,为解决这一问题,在网上搜索到的解决方法如下: 解决方案 修改hosts文件,在ho ...
- 音视频入门-05-RGB-TO-BMP使用开源库
* 音视频入门文章目录 * RGB-TO-BMP 回顾 将 RGB 数据转成 BMP 图片: 了解 BMP 文件格式 准备 BMP 文件头信息 准备 BMP 信息头 BMP 存储 RGB 的顺序是 B ...
- PEB TEB结构体使用
PEB TEB结构体使用一个可执行文件被OS加载到内存,并处理完成相关的模块加载,导入表处理……及其他必须处理后,形成一个进程.在OS内核中保存有一份关于这个进程的身份证信息,就是平常看到的HANDL ...
- SQL Server2008 查找用户登录日志
select loginname,accdate from sys.syslogins
- C#导入Excel表格功能aspx.cs(代码)
using System; using System.Data; using System.Configuration; using System.Collections; using System. ...