Mybatis一级缓存与二级缓存
来源:互联网 发布:网络市场监管现状 编辑:程序博客网 时间:2024/05/01 19:58
一级缓存
一级缓存是针对每一个sqlSession进行缓存。每个sqlSession对象中使用Map存储一级缓存数据,
map中存储了sql执行查询的结果集(java对象)。
生命周期
第一次查询先去缓存中找是否有缓存数据,发现没有,查询数据库,将查询到的数据写入sqlsession的一级缓存区域。
第二次查询先去缓存中找是否有缓存数据,发现有,直接从缓存区域中取出数据返回。
如果 执行sqlsession的添加、修改、删除等操作,会执行commit,最终会清空缓存。sqlSession对象销毁其中一级缓存数据不存在了。sqlSession与SqlSession之间的一级缓存互相不影响。
二级缓存
二级缓存是针对每个mapper相同 的namespace进行缓存。每个SqlSession都要调用mapper下的sql语句,在mapper级别设置了二级缓存的数据结构map,每个mapper对应一个map数据结构,map中存储了二级缓存的数据,存储了sql执行查询的结果集(java对象)。
每个SqlSession都可以访问到二级缓存中的数据,sqlsession对象销毁mapper中的二级缓存数据仍然存在。
生命周期
不同的sqlsession都要调用mapper下的sql语句发起数据库请求。
sqlsession1执行UserMapper下的查询用户请求先从二级缓存中查找有没有数据,如果没有就从数据库中查询,并且将查询到数据存储二级缓存中。
sqlsession2执行UserMapper下的同一个查询用户请求,先从二级缓存中查找有没有数据,如果有就从二级缓存中查询数据,返回。
如果有一个sqlsession3执行UserMapper下添加、修改、删除语句,执行commit操作后,将UserMapper下的所有缓存数据全部清空。
二级缓存需要手动打开
打开总开关:
在核心配置文件SqlMapConfig.xml中加入
<!--注意顺序--><setting name="cacheEnabled" value="true"/>
打开mapper的二级缓存开关:
在mapper.xml配置文件中加入标签
将要查询的pojo类实现序列化接口即`implements Serializable
二级缓存是跨sqlsession的是基于mapper级别的缓存,sqlsession可以使用多个对象,多个对象必须要访问同一个mapper下的sql语句
关闭sqlsession是,才会将数据写入二级缓存`
- Mybatis一级缓存与二级缓存
- MyBatis一级缓存,二级缓存
- MyBatis 一级缓存,二级缓存
- mybatis一级缓存二级缓存
- Mybatis学习笔记-一级缓存与二级缓存
- Mybatis - 查询缓存(一级缓存,二级缓存,与ehcache整合)
- mybatis:一级缓存And二级缓存
- mybatis一级缓存和二级缓存
- MyBatis(4)一级缓存,二级缓存
- Mybatis 一级缓存和二级缓存
- MyBatis一级缓存和二级缓存
- mybatis 一级缓存和二级缓存
- Mybatis一级缓存和二级缓存
- mybatis一级缓存、二级缓存初探
- mybatis一级缓存、二级缓存和自定义二级缓存
- Mybatis第八篇【一级缓存、二级缓存、与ehcache整合】
- MyBatis缓存分为一级缓存和二级缓存
- MyBatis一级缓存,二级缓存,自定义缓存
- PHP入门-环境搭建
- 兔子生崽
- 我遇见的顺丰,让冰冻牛肉变血水
- 数据结构之二叉树的递归遍历(先序,中序,后序)
- python自然语言处理第二章笔记
- Mybatis一级缓存与二级缓存
- 软件工程第二、三章
- 《Wide & Deep Learning for Recommender Systems》
- Spring2.1——自动装配、简化配置、嵌套bean、集合
- shuffle发展概述和调优
- 数学知识点
- JAVA输入输出流学习心得
- 记录服务上线一年来的点点滴滴
- AutoCAD .Net 用代码创建菜单