[MyBatis]二级缓存
2016-05-09 09:33
363 查看
二级缓存:
Session去执行该Mapper下的查询方法时(第一次查询),会将该查询结果存放在Mapper的二级缓存区域
Session去执行该Mapper下的查询方法时(第二次查询),会判断该Mapper下有没有缓存,如果有,则不向数据库查询,直接取缓存
Session去执行该Mapper下的commit()方法后,则清空该Mapper下的二级缓存
二级缓存与一级缓存的区别:
多个Session可以共享Mapper下的数据,二级缓存是按照Mapper的namespace划分,每一个Mapper都有自己的二级缓存区域,如果两个Mapper的namespace相同,那么这两个Mapper共用一个二级缓存区域
开启二级缓存:
先向总配置文件开启二级缓存,SqlMapConfig.xml中
在Mapper.xml中
在POJO类中实现序列化接口
禁用二级缓存
在Mapper.xml中,可以将个别select查询设置为禁用二级缓存
刷新缓存(清空缓存)
在Mapper.xml中,可以将个别添加,删除,更新的statement设置刷新缓存属性,一般执行完commit()之后都会执行刷新缓存,所以一般不用设置此属性,使用默认值即可.
Session去执行该Mapper下的查询方法时(第一次查询),会将该查询结果存放在Mapper的二级缓存区域
Session去执行该Mapper下的查询方法时(第二次查询),会判断该Mapper下有没有缓存,如果有,则不向数据库查询,直接取缓存
Session去执行该Mapper下的commit()方法后,则清空该Mapper下的二级缓存
二级缓存与一级缓存的区别:
多个Session可以共享Mapper下的数据,二级缓存是按照Mapper的namespace划分,每一个Mapper都有自己的二级缓存区域,如果两个Mapper的namespace相同,那么这两个Mapper共用一个二级缓存区域
开启二级缓存:
先向总配置文件开启二级缓存,SqlMapConfig.xml中
<configuration> <!-- //.... --> <!-- 全局配置参数,需要时再设置 --> <settings> <!-- 开启二级缓存 --> <setting name="cacheEnabled" value="true"/> </settings> </configuration>
在Mapper.xml中
<mapper namespace="mapper.OrdersMapper" > <!-- //.... --> <!-- 开启本mapper下的namespace二级缓存 --> <cache /> </mapper>
在POJO类中实现序列化接口
public class Orders implements Serializable { /** * 为什么要实现Serializable接口呢? * 实际上mybaties在存储二级缓存数据时,不止是将数据存放在内存中, * 还会将数据存放在硬盘中,还可能会放在其他地方,有很多种可能性, * 所以要取硬盘中的数据时,因为实现了Serializable接口, * 就可以反序列化取了. */ }
禁用二级缓存
在Mapper.xml中,可以将个别select查询设置为禁用二级缓存
<!-- useCache:是否禁用二级缓存 1>默认为true(开启二级缓存) 2:false:禁用二级缓存 --> <!-- 根据用户id查询订单 --> <select id="findOrdersByUserId" parameterType="int" resultMap="order_user" useCache="false" > SELECT o.*, u.username,u.sex,u.address FROM orders AS o , user AS u WHERE o.user_id = #{value} AND u.id = o.user_id </select>
刷新缓存(清空缓存)
在Mapper.xml中,可以将个别添加,删除,更新的statement设置刷新缓存属性,一般执行完commit()之后都会执行刷新缓存,所以一般不用设置此属性,使用默认值即可.
<!-- flushCache:刷新缓存(就是清空缓存里的所有数据) 1>flushCache="true":开启刷新缓存 2>flushCache="false":关闭刷新缓存 一般执行完commit()之后都会执行刷新缓存, 刷新缓存也就是flushCache="true", 可以避免脏读. --> <delete id="deleteUser" parameterType="int" flushCache="true"> delete from user where id = #{id} </delete>
相关文章推荐
- [后端人员耍前端系列]AngularJs篇:使用AngularJs打造一个简易权限系统
- myOA模块化设计思考--第一篇
- showdetail.php
- Linux系统下搭建Java环境+eclipse
- Java类加载机制与反射 jvm学习
- Android 编写工具类之Log
- 使用python来操作hive(通过 pyhs2 和 HiveServer2)
- 团队作业(七)
- thinkphp---静态前端页面与TP框架整合
- JVM中锁
- Java Web之请求和响应
- ShooterGame 学习笔记1 PlayerPawn的两个Mesh的可见性
- JDK源码分析:hashCode()方法
- Boostrap入门准备之border box
- 2016年度 JavaScript 展望
- 如果scn增长率高该收集那些信息翻译mos文章Evidence to collect when reporting "high SCN rate" issues to Oracle Support
- 【代码笔记】iOS-判断textField里面是否有空
- MapReduce优化
- linux-防火墙iptables
- 回溯法——字符串的全排列