mybatis一级缓存为SqlSession级别的缓存,在sqlSession关闭之前,重复的查询系统会先在一级缓存中查找。
二级缓存为mapper级别的缓存,多个sqlSession共用一个二级缓存。开启二级缓存后,系统在一级缓存中找不到数据会在二级缓存中查找。
在mybatis中开启二级缓存需要如下配置:
mybatis的配置文件mybatis-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org/DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 加载属性文件 -->
<properties resource="db.properties"></properties>
<!-- 启用二级缓存 -->
<!-- setting元素应放在properties之后,typeAliases之前,否则配置文件会报错 -->
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
<!-- 给包中的类注册别名 -->
<typeAliases>
<package name="com.mybatis.pojo"></package>
</typeAliases>
<!-- 配置环境 -->
<environments default="development">
<!-- 配置一个id为development的环境 -->
<environment id="development">
<!-- 使用JDBC事务 -->
<transactionManager type="JDBC" />
<!-- 连接数据池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- 引用映射文件 -->
<mappers>
<mapper resource="com/mybatis/mapper/UserInfoMapper.xml" />
</mappers>
</configuration>
启用二级缓存:
在mybatis-config.xml文件中配置:
<!-- 启用二级缓存 -->
<!-- setting元素应放在properties之后,typeAliases之前,否则配置文件会报错 -->
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
在UserInfoMapper.xml中配置(在mapper标签内):
<!-- 开启二级缓存 -->
<cache eviction="LRU" flushInterval="30000" size="512" readOnly="true" />
项目结构: