Mybatis中的缓存
Mybatis中的缓存
什么是缓存
存在于内存中的临时数据。
为什么使用缓存
减少和数据库的交互次数,提高执行效率。
什么样的数据能使用缓存,什么样的数据不能使用
- 适用于缓存:
- 经常查询并且不经常改变的。
- 数据的正确与否对最终结果影响不大的。
- 不适用于缓存:
- 经常经常改变的数据。
- 数据的正确与否对最终结果影响很大的。
- 例如:商品的库存,银行的汇率,股市的牌价。
Mybatis中的一级缓存和二级缓存
- 一级缓存:
- 它指的是Mybatis中SqlSession对象的缓存。
- 当我们执行查询之后,查询的结果会同时存入到SqlSession为我们提供一块区域中。
- 该区域的结构是一个Map。当我们再次查询同样的数据,mybatis会先去sqlsession中,查询是否有,有的话直接拿出来用。
- 当SqlSession对象消失时,mybatis的一级缓存也就消失了。
- 二级缓存:
- 它指的是Mybatis中SqlSessionFactory对象的缓存。
- 由同一个SqlSessionFactory对象创建的SqlSession共享其缓存。
- 二级缓存的使用步骤:
- 让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)
- 让当前的映射文件支持二级缓存(在IUserDao.xml中配置)
- 让当前的操作支持二级缓存(在select标签中配置)
缓存示例
`
/** * 测试一级缓存 */
@Test
public void TestAll()
{User user = iUserDao.findById(42); System.out.println(user); User user1 = iUserDao.findById(42); System.out.println(user1);
}
输出结果
com.itheima.domain.User@4d02f94e
com.itheima.domain.User@4d02f94e/**
* 测试一级缓存
*/
@Test
public void TestAll()
{ User user = iUserDao.findById(42); System.out.println(user); sqlSession.close(); sqlSession= MyBaitsUtil.getSession(); iUserDao= sqlSession.getMapper(IUserDao.class); User user1 = iUserDao.findById(42); System.out.println(user1);
}输出结果
com.itheima.domain.User@4d02f94e
com.itheima.domain.User@1e683a3e/** * 测试二级缓存 */
全局配置<settings><setting name="cacheEnabled" value="true"/></settings>相应的xml配置<cache/><!-- 查询所有 --><select id="findAll" resultType="user" useCache="true"> select * from user u</select>@Test
public void TestAll()
{ SqlSession sqlSession1 = MyBaitsUtil.getSession(); IUserDao dao1= sqlSession1.getMapper(IUserDao.class); User user = dao1.findById(42); System.out.println(user); sqlSession1.close();//一级缓存消失 SqlSession sqlSession2 = MyBaitsUtil.getSession(); IUserDao dao2= sqlSession2.getMapper(IUserDao.class); User user1 = dao2.findById(42); System.out.println(user1);
}输出结果
2019-07-17 10:27:28,023 612 [main] DEBUG ansaction.jdbc.JdbcTransaction - Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@55536d9e]
2019-07-17 10:27:28,029 618 [main] DEBUG .itheima.dao.IUserDao.findById - ==> Preparing: select * from user where id = ?
2019-07-17 10:27:28,085 674 [main] DEBUG .itheima.dao.IUserDao.findById - ==> Parameters: 42(Integer)
2019-07-17 10:27:28,120 709 [main] DEBUG .itheima.dao.IUserDao.findById - <== Total: 1
com.itheima.domain.User@fba92d3
2019-07-17 10:27:28,132 721 [main] DEBUG ansaction.jdbc.JdbcTransaction - Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@55536d9e]
2019-07-17 10:27:28,132 721 [main] DEBUG ansaction.jdbc.JdbcTransaction - Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@55536d9e]
2019-07-17 10:27:28,132 721 [main] DEBUG source.pooled.PooledDataSource - Returned connection 1431530910 to pool.
2019-07-17 10:27:28,136 725 [main] DEBUG com.itheima.dao.IUserDao - Cache Hit Ratio [com.itheima.dao.IUserDao]: 0.5
com.itheima.domain.User@2b91004a
`
转载于:https://www.cnblogs.com/yangweiguo123/p/11199425.html
Mybatis中的缓存相关推荐
- 【学习笔记】mybatis中的缓存介绍和使用
文章目录 介绍 一级缓存和二级缓存 让一级缓存失效的方法 二级缓存的使用 清空或者跳过二级缓存的3种方式 介绍 什么是缓存? 缓存就是存储数据的一个地方(称作:Cache),当程序要读取数据时,会首先 ...
- Mybatis中的缓存详解
本文来说下Mybatis中的缓存 文章目录 Mybatis是什么 Mybatis的一级缓存 Mybatis的二级缓存 本文小结 Mybatis是什么 Mybatis是一个半自动 ORM(对象关系映射) ...
- 【MyBatis笔记12】MyBatis中二级缓存相关配置内容
这篇文章,主要介绍MyBatis中二级缓存相关配置信息. 目录 一.MyBatis二级缓存 1.1.cache标签相关属性 (1)eviction属性 (2)size属性 (3)flushIntern ...
- Mybatis 中的缓存处理
Mybatis是当今互联网时代下最受欢迎的ORM框架之一.相比与传统的hibernate,Mybatis更轻量也更加灵活.通过配置sql语句的方式,也能够在项目后期优化上更容易下手. 我们都知道,数据 ...
- MyBatis中一级缓存和二级缓存详解
缓存的作用 首先缓存的合理使用是优化中最常见的,将从数据库中查询出来的数据放入缓存中,下次使用时不必从数据库查询,而是直接从缓存中读取,避免频繁操作数据库,减轻数据的压力,同时提高系统性能. 为什么需 ...
- mybatis中一级缓存和二级缓存
1.一级缓存 一级缓存是SqlSession级别的缓存.在操作数据库时需要构造 sqlSession对象,在对象中有一个(内存区域)数据结构(HashMap)用于存储缓存数据.不同的sqlSessio ...
- 【MyBatis学习13】MyBatis中的二级缓存
1. 二级缓存的原理 前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的.为了更加 ...
- Mybatis 中的一级缓存与二级缓存
一,Mybatis中为什么要有缓存 缓存的意义是将用户经常查询的数据放入缓存(内存)中去,用户去查询数据的时候就不需要从磁盘(关系型数据库)中查询,直接从缓存中查询,从而提高了查询效率,解决了高并 ...
- MyBatis中的二级缓存
MyBatis中的二级缓存 1. 二级缓存的原理 前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二 ...
最新文章
- 【深度学习】深度学习在视觉搜索和匹配中的应用
- 用友老是显示服务器错误,客户端连服务器出现这样的错误框
- [Java基础]HashSet集合概述和特点
- Unity MVC框架 StrangeIoC
- 荣耀50样张公布:直出1亿像素 实际效果更出色
- iOS开发中的单元测试(三)——URLManager中的测试用例解析
- Teamcenter 开发中的一些问题
- www请求用到的Unescape
- category is in invalid format hint微信第三方平台将第三方提交的代码包提交审核出错...
- HTML:HTML界面实现HTML代码编译运行界面
- c语言24小时计时法转换为12小时,12时24时换算题(24小时和12小时换算方法)
- 【华为认证考试扫盲】超详细的华为认证入门基础知识,考证必看。
- STM32——FLASH闪存编程原理与步骤
- 2.4G无线收发器SI24R1低成本替代CI24R1
- 主板jrgb是什么_问答:现在的PC主机中有哪些配件支持RGB灯效?
- GBIT51129-2015工业化建筑评价标准
- 特征选择:python lime
- x程序 Linux,使用XCB编写X Window程序(01):快速起步
- Devcpp、Codeblocks如何设置支持c++11
- 解决 IE下ajaxfileupload不兼容的问题