微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mybatis-测试二级缓存

1.在mybatis-config.xml中开启二级缓存

<setting name="cacheEnabled" value="true"/>

2.在Mapper.xml中需要设置二级缓存的namespace中添加cache标签

<cache/>

2.1也可以在cache标签中对二级缓存进行配置

<cache
  eviction="FIFO"
  flushInterval="60000"
  size="512"
  readOnly="true"/>

这个更高级的配置创建了一个 FIFO 缓存,每隔 60 秒刷新,最多可以存储结果对象或列表的 512 个引用,而且返回的对象被认为是只读的,因此对它们进行修改可能会在不同线程中的调用者 产生冲突。

3.测试

3.1测试

@Test
public void test(){
    sqlSession sqlSession = MybatisUtils.getsqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    UserMapper mapper1 = sqlSession.getMapper(UserMapper.class);
    User user = mapper.queryUserById(1);
    User user2 = mapper1.queryUserById(1);
    System.out.println(user);
    System.out.println("==================================================");
    System.out.println(user2);
    System.out.println(user == user2);
    sqlSession.close();
}

3.2执行异常

原因:写入的对象没有序列化,实例类需要实现Serializable接口

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
    private int id;
    private String name;
    private String pwd;
}

3.3再次执行结果分析

查询了一次数据库,并且两次查询返回的对象相同,说明第二次是在缓存中查询的,说明二级缓存的作用域大于一级缓存,即便是两个不同的sqlSession缓存也能生效

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐