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 ROS Turtlebot3 多机协同自主探索环境时遇到的多机任务分配问题,explore节点
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题