本文共 1612 字,大约阅读时间需要 5 分钟。
二级缓存是 mapper 映射级别的缓存,多个 SqlSession 去操作同一个 Mapper 映射的 sql 语句,多个SqlSession 可以共用二级缓存,二级缓存是跨 SqlSession 的。
使用步骤:
1.SqlMapConfig.xml中配置(此步骤可省略)`因为 cacheEnabled 的取值默认就为 true,所以这一步可以省略不配置。为 true 代表开启二级缓存;为false 代表不开启二级缓存。
2.配置相关的 Mapper 映射文件
3.配置 statement 上面的 useCache 属性
测试代码
private InputStream in; private SqlSessionFactory factory; @Before//用于在测试方法执行之前执行 public void init()throws Exception{ //1.读取配置文件,生成字节输入流 in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.获取 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); } @After//用于在测试方法执行之后执行 public void destroy()throws Exception{ in.close(); } /** * 测试二级缓存 */ @org.junit.Test public void testFirstLevelCache(){ SqlSession sqlSession1 = factory.openSession(); IUserDao dao1 = sqlSession1.getMapper(IUserDao.class); User user1 = dao1.findById(41); System.out.println(user1); sqlSession1.close();//一级缓存消失 SqlSession sqlSession2 = factory.openSession(); IUserDao dao2 = sqlSession2.getMapper(IUserDao.class); User user2 = dao2.findById(41); System.out.println(user2); sqlSession2.close(); System.out.println(user1 == user2); }
可见两个对象并不相同,二级缓存中存储的数据类型并不是Object类型,而是在重新查询时将类似{username:value,address:‘北京’,…}重新封装返回。
注意,启用二级缓存的实体类需要实现 java.io.Serializable 接口,这样才可以使用序列化方式来保存对象。转载地址:http://lciwi.baihongyu.com/