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. JIRA中的并联审批流程定制

    JIRA号称可以跟踪任何事务,让JIRA的流程来匹配团队的工作流程,而不是让你的团队适应JIRA的工作流程.但是在实践中,有些有些流程用JIRA还是比较困难的,比如并联审批流程,一个并联审批流程需求大 ...

  2. php设计模式;抽象类、抽象方法

    设计模式 什么叫设计模式 所谓设计模式,就是一些解决问题的“常规做法”,是一种认为较好的经验总结.面对不同的问题,可能会有不同的解决办法,此时就可以称为不同的设计模式. 工厂模式 在实际应用中,我们总 ...

  3. Spring @Transactional 事务机制

    几个概念要清楚:事务的传播机制,事务的边界 工作原理 运行配置@Transactional注解的测试类的时候,具体会发生如下步骤 1)事务开始时,通过AOP机制,生成一个代理connection对象, ...

  4. 双链表的基本实现与讲解(C++描述)

    双链表 双链表的意义 单链表相对于顺序表,确实在某些场景下解决了一些重要的问题,例如在需要插入或者删除大量元素的时候,它并不需要像顺序表一样移动很多元素,只需要修改指针的指向就可以了,其时间复杂度为 ...

  5. C++ 用 vector 生成三维数组,并计算行、列、高

    //Microsoft Visual Studio 2015 Enterprise //用vector生成三维数组,并计算行.列.高 #include <iostream> #includ ...

  6. Python24之递归和迭代

    一.递归的含义及一些用途 递归就是函数通过return语句实现自己调用自己的过程,基本上所有的程序语言都有递归算法,常有人说(’一般程序员使用迭代,天才程序员使用递归‘),汉诺塔游戏.谢尔宾斯基三角形 ...

  7. Pythn基础课程笔记day03_学习内容概要及作业讲解

    第三天_学习内容概要 今日内容概要 1.整形 2.布尔类型 3.字符串 内容回顾和补充 内容回顾 利用思维导图,罗列复习自己学习的内容,巩固知识点. xmind 软件 processon 网站 补充 ...

  8. 根据IP获取国家,市区,经纬度等的免费库

    https://dev.maxmind.com/geoip/geoip2/geolite2/ 此网站上有提供SDK版,访问在线服务,也有离线版,下载库到本地,使用相应语言解析库

  9. WebClient 下载文件

    WebClient用法小结(转载)   如果只想从特定的URI请求文件,则使用WebClient,它是最简单的.NET类,它只用一两条命令执行基本操作,.NET FRAMEWORK目前支持以http: ...

  10. android 错误解决

    转自:https://blog.csdn.net/gbstyle/article/details/82926358 错误1: com.android.ddmlib.AdbCommandRejected ...