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语句


最新文章

  1. EXCEL里面的数字显示为文本 不用科学计数法显示
  2. [OpenCV] 4、图像叠加 addWeighted
  3. zabbix(sql注入判断脚本)
  4. hdu2923 最短路floyd
  5. datagridview 用法
  6. Codeforces Round #366 (Div. 2) A
  7. http-equiv
  8. javascript面向对象--自定义类型
  9. mysqlsla慢查询分析工具教程
  10. C语言递归回溯法迷宫求解
  11. MFC窗口风格 WS_style/WS_EX_style
  12. [福大软工] Z班 第5次成绩排行榜
  13. html5-article元素
  14. [Word]让字符重合显示
  15. [转]CSS浏览器兼容问题总结
  16. log Log4NET配置
  17. R软件常用命令
  18. static作用(修饰函数、局部变量、全局变量)转自http://www.cnblogs.com/stoneJin/archive/2011/09/21/2183313.html
  19. 线程相关函数(3)-pthread_detach()将某个线程设成分离态
  20. 仿照Chome的GhostPage调试功能

热门文章

  1. [转帖]单集群10万节点 走进腾讯云分布式调度系统VStation
  2. SpringBoot项目集成PageHelper使用
  3. Anaconda中安装了Libtiff模块,但运行程序显示ModuleNotFoundError: No module named &#39;libtiff&#39;
  4. PAT(B) 1043 输出PATest(Java)统计
  5. AVR单片机教程——点亮第一个LED
  6. Linux中request_irq()中断申请与处理说明
  7. C++ new/delete详解及原理
  8. Bootsrap表格表单及其使用方法
  9. Redis—.Net中的使用
  10. git 讲解