Mybatis知识点(缓存机制)
-
一级缓存(默认开启)
不需要配置,一级缓存发生在sqlsession当sqlsession不变时执行同一个操作会用上缓存可以给数据库减少负担
关于mybtis的缓存机制:《mybatis 3源码深度解析》有这样一段话:
MyBatis的缓存分为一级缓存和二级缓存,一级缓存默认是开启的,而且不能关闭。至于一级缓存为什么不能关闭,MyBatis核心开发人员做出了解释:MyBatis的一些关键特性(例如通过和 建立级联映射、避免循环引用(circular references)、加速重复嵌套查询等)都是基于MyBatis一级缓存实现的,而且MyBatis结果集映射相关代码重度依赖CacheKey,所以目前MyBatis不支持关闭一级缓存。
MyBatis提供了一个配置参数localCacheScope,用于控制一级缓存的级别,该参数的取值为SESSION、STATEMENT,当指定localCacheScope参数值为SESSION时,缓存对整个SqlSession有效,只有执行DML语句(更新语句)时,缓存才会被清除。当localCacheScope值为STATEMENT时,缓存仅对当前执行的语句有效,当语句执行完毕后,缓存就会被清空。
MyBatis的一级缓存,用户只能控制缓存的级别,并不能关闭。
配置参数具体在哪控制:
<setting name="localCacheScope" value="SESSION"/> -
二级缓存(需要手动开启)
-
在MyBatis主配置文件中指定cacheEnabled属性值为true。
<configuration> <!--开启二级缓存 --> <settings> <setting name="cacheEnabled" value="true"/> </settings> <environments default="development"> <environment id="development"> <!-- 配置JDBC事务控制,由mybatis进行管理 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置数据源,采用dbcp连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/survey?useUnicode=true&characterEncoding=utf8"/> <property name="username" value="root"/> <property name="password" value="747452"/> </dataSource> </environment> </environments> <!-- 加载mapper映射文件 --> <mappers> <mapper resource="dao/VoteUser.xml"/> </mappers> </configuration> -
在MyBatis Mapper配置文件中,配置缓存策略、缓存刷新频率、缓存的容量等属性,例如:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="dao.VoteUserDao"> <cache evition="FIFO" flushInterval="60000" size="512" readOnly="true"></cache> -
实现实体类序列化
public class VoteUser implements Serializable -
二级缓存发生在Sqlsessionfactory里面需要同一个factory
-

浙公网安备 33010602011771号