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]

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