本帖最后由 longxf_sjz 于 2019-7-7 15:36 编辑
一 MyBatis二级缓存原理
mybatis中的二级缓存是mapper级别的缓存,它是按照不同mapper有不同的namespace来区分的。也就是说,如果两个mapper的namespace相同,即使是两个mapper,那么这两个mapper中执行sql查询到的数据也将存在相同的二级缓存区域中。
二 MyBatis二级缓存使用
1开启二级缓存
由于mybaits的二级缓存是mapper范围级别,所以除了在SqlMapConfig.xml设置二级缓存的总开关外,还要在具体的mapper.xml中开启二级缓存。设置如下:
[XML] 纯文本查看 复制代码 <settings>
<setting name="cacheEnabled" value="true"/>
</settings>
这是在SqlMapConfig.xml中设置的,还得在具体的mapper.xml中设置,如下:
[XML] 纯文本查看 复制代码 <mapper namespace="com.itheima.dao.IUserDao">
<!--开启user支持二级缓存-->
<cache/>
</mapper>
2 将需要缓存的类实现Serializable接口 [Java] 纯文本查看 复制代码 public class User implements Serializable {
private Integer id;
private String username;
private String address;
get和set方法省略
}
3 测试mybatis的二级缓存
[Java] 纯文本查看 复制代码 @Test
public void testCache2() throws Exception {
SqlSession sqlSession1 = sqlSessionFactory.openSession();
SqlSession sqlSession2 = sqlSessionFactory.openSession();
// 创建代理对象
UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class);
// 第一次发起请求,查询id为1的用户 从数据库中查询
User user1 = userMapper1.findUserById(1);
System.out.println(user1);
sqlSession1.close();
// 创建代理对象
UserMapper userMapper2 = sqlSession2.getMapper(UserMapper.class);
// 第二次发起请求,查询id为1的用户 从二级缓存中查询
User user2 = userMapper2.findUserById(1);
System.out.println(user2);
sqlSession2.close();
}
|