java-mybaits-00601-查询缓存-一级缓存、二级缓存
1、什么是查询缓存

2、一级缓存
2.1、一级缓存工作原理

2.2、一级缓存测试
- @Test
- public void testCache1() throws Exception{
- SqlSession sqlSession = sqlSessionFactory.openSession();//创建代理对象
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- //下边查询使用一个SqlSession
- //第一次发起请求,查询id为1的用户
- User user1 = userMapper.findUserById(1);
- System.out.println(user1);
- // 如果sqlSession去执行commit操作(执行插入、更新、删除),清空SqlSession中的一级缓存,这样做的目的为了让缓存中存储的是最新的信息,避免脏读。
- //更新user1的信息
- user1.setUsername("测试用户22");
- userMapper.updateUser(user1);
- //执行commit操作去清空缓存
- sqlSession.commit();
- //第二次发起请求,查询id为1的用户
- User user2 = userMapper.findUserById(1);
- System.out.println(user2);
- sqlSession.close();
- }
2.3、一级缓存应用
3、二级缓存
3.1、原理

3.2、开启二级缓存
描述 | 允许值 | 默认值 | |
cacheEnabled | 对在此配置文件下的所有cache 进行全局性开/关设置。 | true false | true |


3.3、调用pojo类实现序列化接口

3.4、测试方法
- // 二级缓存测试
- @Test
- public void testCache2() throws Exception {
- SqlSession sqlSession1 = sqlSessionFactory.openSession();
- SqlSession sqlSession2 = sqlSessionFactory.openSession();
- SqlSession sqlSession3 = sqlSessionFactory.openSession();
- // 创建代理对象
- UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class);
- // 第一次发起请求,查询id为1的用户
- User user1 = userMapper1.findUserById(1);
- System.out.println(user1);
- //这里执行关闭操作,将sqlsession中的数据写到二级缓存区域
- sqlSession1.close();
- //使用sqlSession3执行commit()操作
- UserMapper userMapper3 = sqlSession3.getMapper(UserMapper.class);
- User user = userMapper3.findUserById(1);
- user.setUsername("张明明");
- userMapper3.updateUser(user);
- //执行提交,清空UserMapper下边的二级缓存
- sqlSession3.commit();
- sqlSession3.close();
- UserMapper userMapper2 = sqlSession2.getMapper(UserMapper.class);
- // 第二次发起请求,查询id为1的用户
- User user2 = userMapper2.findUserById(1);
- System.out.println(user2);
- sqlSession2.close();
- }
3.5、禁用二级缓存【useCache配置】
3.6、刷新缓存(就是清空缓存)
3.7、Mybatis Cache参数
java-mybaits-00601-查询缓存-一级缓存、二级缓存的更多相关文章
- hibernate笔记--缓存机制之 二级缓存(sessionFactory)和查询缓存
二级缓存(sessionFactory): Hibernate的二级缓存由SessionFactory对象管理,是应用级别的缓存.它可以缓存整个应用的持久化对象,所以又称为“SessionFactor ...
- 【mybatis源码学习】mybtias一级,二级缓存
转载:https://www.cnblogs.com/ysocean/p/7342498.html mybatis 为我们提供了一级缓存和二级缓存,可以通过下图来理解: ①.一级缓存是SqlSessi ...
- Mybatis一级、二级缓存
Mybatis一级.二级缓存 一级缓存 首先做一个测试,创建一个mapper配置文件和mapper接口,我这里用了最简单的查询来演示. <mapper namespace="c ...
- Mybatis 的一级、二级缓存?
1)一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 C ...
- Mybatis 的一级、二级缓存?
1)一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 C ...
- mybati缓存机制之二级缓存配置
二级缓存配置 在MyBatis的配置文件中开启二级缓存. <setting name="cacheEnabled" value="true"/> 在 ...
- hibernate的一级和二级缓存
一级缓存就是Session级别的缓存,close后就没了. 二级缓存就是SessionFactory级别的缓存,全局缓存,要配置其他插件. 什么样的数据适合存放到第二级缓存中? 1.很少被修改的数据 ...
- Hibernate缓存策略(一级缓存和EHcache二级缓存)
如何配置二级缓存: 第一步:导入EHcache依赖 1)Maven项目: <!--此处使用hibernate4--> <dependency> <groupId>o ...
- mybatis学习--缓存(一级和二级缓存)
声明:学习摘要! MyBatis缓存 我们知道,频繁的数据库操作是非常耗费性能的(主要是因为对于DB而言,数据是持久化在磁盘中的,因此查询操作需要通过IO,IO操作速度相比内存操作速度慢了好几个量级) ...
- 170214、mybatis一级和二级缓存
mybatis一级缓存是指在内存中开辟一块区域,用来保存用户对数据库的操作信息(sql)和数据库返回的数据,如果下一次用户再执行相同的请求, 那么直接从内存中读数数据而不是从数据库读取. 其中数据的生 ...
随机推荐
- 网桥bridge
1. 网桥基础 什么是网桥 网桥将多个网络在数据链路层连接起来.网桥的前身是集线器或中继器.网桥和集线器的区别:集线器上各端口都是共享同一条背板总线的,网桥的两个端口分别有一条独立的交换信道,不是共享 ...
- memcached server LRU 深入分析
Memcached,人所皆知的remote distribute cache(不知道的可以javaeye一下下,或者google一下下,或者baidu一下下,但是鉴于baidu的排名商业味道太浓(从最 ...
- SQL简明教程系列15 创建索引
CREATE INDEX用于在表中创建索引. 索引使数据库应用程序可以更快地查找数据. 注:更新一个包含索引的表比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新.因此,理想的做法是仅仅在常 ...
- 织梦dede模板中广告的去除方法?
织梦)dede模板中广告的去除方法1.我们先删除头部的广告,找到templetsdefault下的head.htm文件,打开后找到<div>{dede:myad name=’innerTo ...
- C#中动态调用DLL动态链接库
其中要使用两个未公开的Win32 API函数来存取控制台窗口,这就需要使用动态调用的方法,动态调用中使用的Windows API函数主要有三个,即:Loadlibrary,GetProcAddress ...
- iOS Web开发
1.让web页面的输入框是数字键盘 html 中 input 的 type = "tel"
- Qt计算两个时间差
QTime startTime = QTime::currentTime(); QThread::msleep(SLEEP_TIME_MILL); QTime stopTime = QTime::cu ...
- Android 防破解技术简介
Android 防破解技术简介 这几年随着互联网的不断发展,Android App 也越来越多!但是随之而来的问题也越来越多,这其中比较令人头疼的问题就是:有些不法分子利用反编译技术破解 App,修改 ...
- java基础---->数组的基础使用(一)
数组是一种效率最高的存储和随机访问对象引用序列的方式,我们今天来对数组做简单的介绍.手写瑶笺被雨淋,模糊点画费探寻,纵然灭却书中字,难灭情人一片心. 数组的简单使用 一.数组的赋值 String[] ...
- TFS 创建团队成员及管理
用TFS服务器管理代码 1:创建TFS服务器 2:创建TFS项目 3:创建TFS团队成员 4:上传代码,共享链接,对代码进行管理 这里主要介绍第三步:创建TFS团队成员 第一种:通过连接进入TFS可视 ...