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的一级缓存机制简介的更多相关文章

  1. MyBatis的一级缓存和二级缓存简介笔记

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

  2. spring管理hibernate,mybatis,一级缓存失效原因

    mybatis缓存:一级缓存和二级缓存 hibernate缓存:一级缓存和二级缓存 关于缓存: 缓存是介于物理数据源与应用程序之间,是对数据库中的数据复制一份临时放在内存中的容器, 其作用是为了减少应 ...

  3. 《深入理解mybatis原理6》 MyBatis的一级缓存实现详解 及使用注意事项

    <深入理解mybatis原理> MyBatis的一级缓存实现详解 及使用注意事项 0.写在前面   MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓 ...

  4. 《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项

    MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓存机制上.MyBatis提供了一级缓存.二级缓存 这两个缓存机制,能够很好地处理和维护缓存,以提高系统的性能.本 ...

  5. mybatis深入理解(五)-----MyBatis的一级缓存实现详解 及使用注意事项

    0.写在前面 MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓存机制上.MyBatis提供了一级缓存.二级缓存 这两个缓存机制,能够很好地处理和维护缓存,以提高 ...

  6. 【面试普通人VS高手系列】说一说Mybatis里面的缓存机制

    一个工作了 5年的程序员,在私信里面不断向我诉苦. 他说,他用了Mybatis这么久,怎么滴也算是精通Mybatis了吧. 结果竟然在Mybatis这个面试题上翻车了! 真的好烦! 好吧,我们今天来看 ...

  7. [原创]关于mybatis中一级缓存和二级缓存的简单介绍

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

  8. SSM-MyBatis-17:Mybatis中一级缓存(主要是一级缓存存在性的证明,增删改对一级缓存会造成什么影响)

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 缓存------------------------------------------> 很熟悉的一个 ...

  9. 关于mybatis中一级缓存和二级缓存的简单介绍

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

随机推荐

  1. mui弹出二维码示例

    <div id="tap_popover" class="box mui-popover mui-popover-action mui-popover-bottom ...

  2. conda创建、删除、重命名环境

    链接:https://www.jianshu.com/p/7265011ba3f2 创建新环境 conda create -n rcnn python=3.6 删除环境 conda remove -n ...

  3. [转帖]14-使用glusterfs做持久化存储

    14-使用glusterfs做持久化存储 https://www.cnblogs.com/guigujun/p/8366558.html 使用glusterfs做持久化存储 我们复用kubernete ...

  4. Session中清除对象方法比较

    转载. https://blog.csdn.net/u014401141/article/details/51816308 Session中清除对象方法比较   http://blog.csdn.ne ...

  5. 长乐培训Day5

    T1 圆圈舞蹈 题目 [题目描述] 熊大妈的奶牛在时针的带领下,围成了一个圈跳舞.由于没有严格的教育,奶牛们之间的间隔不一致. 奶牛想知道两只最远的奶牛到底隔了多远.奶牛A到B的距离为A顺时针走和逆时 ...

  6. hadoop 伪分布启动-fs格式化

    1.独立模式(standalone|local) nothing! 本地文件系统. 不需要启用单独进程. 2.pesudo(伪分布模式) 等同于完全分布式,只有一个节点. SSH: //(Socket ...

  7. Vue.js源码全方位深入解析--学习笔记

    模板中的插入变量是如何渲染到DOM上的? initMixin(Vue)->_init->$options-> $mount()当执行该挂载方法时DOM变化 为什么可以通过this访问 ...

  8. Arm-Linux 移植 jpeg库

    背景: jpeg库的使用可以提高显示效率. host平台 :Ubuntu 16.04 arm平台 : S5P6818   jpeg    :v9c arm-gcc :4.8.1 主机准备: 运行以下脚 ...

  9. 序列方差[NTT]

    也许更好的阅读体验 \(\mathcal{Description}\) 给你一个长度为\(n\)的数组\(a\) 你会得到 \(q\) 条指令, 分两种: \(1\ l\ r\ w\) 表示把 \(l ...

  10. MQ与logstash实现ES与数据库同步区别

    Logstash 实现ES 与数据库同步: 使用定时器(使用sql 定时的去查询数据进行同步).实现方式比较简单. MQ 实现 ES 与数据库同步: 实时性,消息放到MQ中,消费者会自动的消费,复杂性 ...