mybatis 3.x 缓存介绍
2016-07-14 11:35
218 查看
MyBatis缓存分为一级缓存和二级缓存:
一级缓存是基于 PerpetualCache(mybatis自带)的 HashMap 本地缓存,作用范围为session,
所以当session commit或close后,缓存就会被清空.
1)单独使用MyBatis而不继承Spring,使用原生的MyBatis的SqlSessionFactory来构造sqlSession查询,
是可以使用以及缓存的,mybatis的一级缓存在spring中是没有作用的.
二级缓存
级缓存默认也是基于 PerpetualCache,但是可以为其制定存储源,比如ehcache.
二级缓存就是global caching,它超出session范围之外,可以被所有sqlSession共享,
它的实现机制和mysql的缓存一样,开启它只需要在mybatis的配置文件开启settings里的
<setting name="cacheEnabled" value="true"/>
以及在相应的Mapper文件(例如userMapper.xml)里开启.
<mapper namespace="dao.userdao">
... select statement ...
<!-- Cache 配置 -->
<cache
eviction="FIFO"
flushInterval="60000"
size="512"
readOnly="true" />
</mapper>
二级缓存补充说明
1. 映射语句文件中的所有select语句将会被缓存。
2. 映射语句文件中的所有insert,update和delete语句会刷新缓存。
3. 缓存会使用Least Recently Used(LRU,最近最少使用的)算法来收回。
4. 缓存会根据指定的时间间隔来刷新。
5. 缓存会存储1024个对象
cache标签常用属性:
eviction是缓存的淘汰算法,可选值有"LRU"、"FIFO"、"SOFT"、"WEAK",缺省值是LRU
flashInterval指缓存过期时间,单位为毫秒,60000即为60秒,缺省值为空,即只要容量足够,永不过期
size指缓存多少个对象,默认值为1024
readOnly是否只读,如果为true,则所有相同的sql语句返回的是同一个对象
(有助于提高性能,但并发操作同一条数据时,可能不安全),如果设置为false,则相同的sql,
后面访问的是cache的clone副本。
上面这个是全局设置,在每条单独的sql语句上,还可以有局部设置,比如:
<select id="getOrder" parameterType="int" resultType="TOrder" useCache="false">
...
</select>
useCache="false"表示该select语句不使用缓存.
一级缓存是基于 PerpetualCache(mybatis自带)的 HashMap 本地缓存,作用范围为session,
所以当session commit或close后,缓存就会被清空.
1)单独使用MyBatis而不继承Spring,使用原生的MyBatis的SqlSessionFactory来构造sqlSession查询,
是可以使用以及缓存的,mybatis的一级缓存在spring中是没有作用的.
二级缓存
级缓存默认也是基于 PerpetualCache,但是可以为其制定存储源,比如ehcache.
二级缓存就是global caching,它超出session范围之外,可以被所有sqlSession共享,
它的实现机制和mysql的缓存一样,开启它只需要在mybatis的配置文件开启settings里的
<setting name="cacheEnabled" value="true"/>
以及在相应的Mapper文件(例如userMapper.xml)里开启.
<mapper namespace="dao.userdao">
... select statement ...
<!-- Cache 配置 -->
<cache
eviction="FIFO"
flushInterval="60000"
size="512"
readOnly="true" />
</mapper>
二级缓存补充说明
1. 映射语句文件中的所有select语句将会被缓存。
2. 映射语句文件中的所有insert,update和delete语句会刷新缓存。
3. 缓存会使用Least Recently Used(LRU,最近最少使用的)算法来收回。
4. 缓存会根据指定的时间间隔来刷新。
5. 缓存会存储1024个对象
cache标签常用属性:
eviction是缓存的淘汰算法,可选值有"LRU"、"FIFO"、"SOFT"、"WEAK",缺省值是LRU
flashInterval指缓存过期时间,单位为毫秒,60000即为60秒,缺省值为空,即只要容量足够,永不过期
size指缓存多少个对象,默认值为1024
readOnly是否只读,如果为true,则所有相同的sql语句返回的是同一个对象
(有助于提高性能,但并发操作同一条数据时,可能不安全),如果设置为false,则相同的sql,
后面访问的是cache的clone副本。
上面这个是全局设置,在每条单独的sql语句上,还可以有局部设置,比如:
<select id="getOrder" parameterType="int" resultType="TOrder" useCache="false">
...
</select>
useCache="false"表示该select语句不使用缓存.
相关文章推荐
- Yii视图操作之自定义分页实现方法
- Adobe Reader显示某些文档字体虚化无法看清的解决方法
- Android 控制wifi 相关操作实例
- java.lang.IllegalStateException: The specified child already has a parent 错误处理
- centos7 systemd in Fedora 22: Failed to restart service: Access Denied
- 全面解析PHP操作Memcache基本函数
- Can't adjust the time of day: Invalid argument
- lua之诡异的tonumber
- httpclient 发送get请求 。
- UEditor 之查询当前编辑区域的状态是源码模式还是可视化模式
- websocket 心跳包重连
- python 学习(三)基础语法
- 一些功能sql整理
- Hive的分组排序方法-row_number
- 向数据库中插入日期数据
- Java多线程学习笔记
- js字符串截取函数slice()、substring()、substr()
- 「理解HTTP」之常见的状态码
- PHP5.3配置文件php.ini-development和php.ini-production的区别
- 设计模式之策略模式