1.开启二级缓存
config/SqlMapConfig.xml
<span style="white-space:pre"> </span><settings>
<setting name="lazyLoadingEnabled" value="true" />
<setting name="aggressiveLazyLoading" value="false" />
<strong><!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true" /></strong>
</settings>
test单元测试
// 二级缓存测试
@Test
public void testCache1() throws Exception{
SqlSession sqlSession1 = sqlSessionFactory.openSession();
SqlSession sqlSession2 = sqlSessionFactory.openSession();
SqlSession sqlSession3 = sqlSessionFactory.openSession();
UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class);
// 第一次发起请求
User user1 = userMapper1.findUserById(1);
System.out.println(user1);
sqlSession1.close();
// 使用sqlSession3执行commit()操作
UserMapper userMapper3 = sqlSession3.getMapper(UserMapper.class);
User user = userMapper3.findUserById(1);
user.setUsername("张明明");
userMapper3.updateUser(user);
// 执行提交,清空二级缓存
sqlSession3.commit();
sqlSession3.close();
// 第二次发起请求
UserMapper userMapper2 = sqlSession2.getMapper(UserMapper.class);
User user2 = userMapper2.findUserById(1);
System.out.println(user2);
sqlSession2.close();
}
2.开启禁止二级缓存
src/mapper包UserMapper.xml配置文件
<!-- R 根据id查询一条记录结果 -->
<select id="findUserById" parameterType="int" resultType="user" <strong><span style="color:#ff0000;">useCache="false"</span></strong>>
SELECT * FROM USER WHERE id=#{value}
</select>
test单元测试
// 二级缓存测试
@Test
public void testCache1() throws Exception{
SqlSession sqlSession1 = sqlSessionFactory.openSession();
SqlSession sqlSession2 = sqlSessionFactory.openSession();
SqlSession sqlSession3 = sqlSessionFactory.openSession();
UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class);
// 第一次发起请求
User user1 = userMapper1.findUserById(1);
System.out.println(user1);
sqlSession1.close();
// // 使用sqlSession3执行commit()操作
// UserMapper userMapper3 = sqlSession3.getMapper(UserMapper.class);
// User user = userMapper3.findUserById(1);
// user.setUsername("张明明");
// userMapper3.updateUser(user);
// // 执行提交,清空二级缓存
// sqlSession3.commit();
// sqlSession3.close();
// 第二次发起请求
UserMapper userMapper2 = sqlSession2.getMapper(UserMapper.class);
User user2 = userMapper2.findUserById(1);
System.out.println(user2);
sqlSession2.close();
}
3.mybatis整合ehcache
src/mapper包UserMapper.xml
<!-- 开启本mapper的namespace下的二缓存 -->
<cache type="org.mybatis.caches.ehcache.EhcacheCache" />
config/ehcache.xml
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<diskStore path="F:\develop\ehcache" /> 一种方法:如果控制台报错,把这个注释。 另一种方法:先删除<span style="font-weight: bold; color: rgb(255, 0, 0); font-family: Arial, Helvetica, sans-serif;">useCache="false"</span><span style="font-family: Arial, Helvetica, sans-serif;">,也可以不用了注释这个。</span><span style="font-weight: bold; color: rgb(255, 0, 0); font-family: Arial, Helvetica, sans-serif;">
</span>
<defaultCache
maxElementsInMemory="1000"
maxElementsOnDisk="10000000"
eternal="false"
overflowToDisk="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
</defaultCache>
</ehcache>
src/mapper包UserMapper.xml
<!-- R 根据id查询一条记录结果 -->
<select id="findUserById" parameterType="int" resultType="user" <span style="color:#ff0000;"><strong>useCache="false"</strong></span>> 如果控制台禁止开启二级缓存,就删除红色的。
SELECT * FROM USER WHERE id=#{value}
</select>
4
5
6