GJ_HQQ 2020-03-02 13:31 采纳率: 0%
浏览 749

Mybatis中的二级缓存无效

在学习mybatis中的二级缓存的时候,出现了二级缓存测试没效果的情况,找了很久没找到原因,运行结果中也有二级缓存的Cache Hit Ratio

一、全局配置文件

<settings>
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="aggressiveLazyLoading" value="false"/>
    <setting name="cacheEnabled" value="true"/>
</settings>

二、namespace

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gjhqq.mybatis_inf.EmployeeMapper">
    <cache eviction="FIFO" flushInterval="60000" readOnly="true" size="1024"></cache>

三、Test类

@Test
    public void testSecondCache() throws IOException  {
        SqlSession sqlSession1 = sqlSessionFactory().openSession();
        SqlSession sqlSession2 = sqlSessionFactory().openSession();

        try {
            EmployeeMapper employeeMapper1 = sqlSession1.getMapper(EmployeeMapper.class);
            EmployeeMapper employeeMapper2 = sqlSession2.getMapper(EmployeeMapper.class);

            Employee emp1 = employeeMapper1.selectOne(2);
            System.out.println(emp1);
            sqlSession1.close();

            Employee emp2 = employeeMapper2.selectOne(2);
            System.out.println(emp2);
            sqlSession2.close();

        } finally {

        }
    }

运行结果:

DEBUG 03-02 13:20:55,243 Cache Hit Ratio [com.gjhqq.mybatis_inf.EmployeeMapper]: 0.0  (LoggingCache.java:62) 
DEBUG 03-02 13:20:55,249 ==>  Preparing: select * from tbl_employee where id = ?   (BaseJdbcLogger.java:145) 
DEBUG 03-02 13:20:55,267 ==> Parameters: 2(Integer)  (BaseJdbcLogger.java:145) 
DEBUG 03-02 13:20:55,279 <==      Total: 1  (BaseJdbcLogger.java:145) 
Employee [id=2, last_name=lisi, gender=1, email=hqq@gj.com, dept_id=2, dept=null]
DEBUG 03-02 13:20:55,283 Cache Hit Ratio [com.gjhqq.mybatis_inf.EmployeeMapper]: 0.0  (LoggingCache.java:62) 
DEBUG 03-02 13:20:55,284 ==>  Preparing: select * from tbl_employee where id = ?   (BaseJdbcLogger.java:145) 
DEBUG 03-02 13:20:55,284 ==> Parameters: 2(Integer)  (BaseJdbcLogger.java:145) 
DEBUG 03-02 13:20:55,285 <==      Total: 1  (BaseJdbcLogger.java:145) 
Employee [id=2, last_name=lisi, gender=1, email=hqq@gj.com, dept_id=2, dept=null]
  • 写回答

1条回答 默认 最新

  • lian_yixin 2021-10-23 11:40
    关注

    需要用同一个SqlSessionFactory去获取SqlSession,所以,应该把sqlSessionFactory()方法的内容直接写在测试方法中。

    评论

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制