首页 > 其他分享 >开启mybatis二级缓存

开启mybatis二级缓存

时间:2024-03-14 17:01:07浏览次数:23  
标签:开启 device 二级缓存 synchronization SqlSession mybatis where id select

mybatis的二级缓存是mapper级别的,也就是同一个mapper下的查询,可以使用缓存里面的值

下面就写个demo记录下

没有使用缓存之前

service

    @Override
    public Device getUserById(Long id) {
        Device byId = deviceMapper.getDeviceById(id);
        log.info("======================");
        Device one = deviceMapper.getDeviceById(id);
        return one;
    }

xml

    <select id="getDeviceById" resultType="org.ongoal.tun.demos.entity.Device">
        select * from device where device_id = #{i}
    </select>

控制台

Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@568fa466] was not registered for synchronization because synchronization is not active
JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@3c59cb10] will not be managed by Spring
==>  Preparing: select * from device where device_id = ?
==> Parameters: 1(Long)
<==    Columns: device_id, device_name, source_id, sort_num, del_flag, create_by, update_by, create_time, update_time
<==        Row: 1, 开发数据1, 1750083747497119745, 0, 0, null, null, null, null
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@568fa466]
2024-03-14 16:45:05.679  INFO 19328 --- [nio-8080-exec-1] o.o.t.d.service.Impl.DeviceServiceImpl   : ======================
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@46143ad3] was not registered for synchronization because synchronization is not active
JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@3c59cb10] will not be managed by Spring
==>  Preparing: select * from device where device_id = ?
==> Parameters: 1(Long)
<==    Columns: device_id, device_name, source_id, sort_num, del_flag, create_by, update_by, create_time, update_time
<==        Row: 1, 开发数据1, 1750083747497119745, 0, 0, null, null, null, null
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@46143ad3]

从控制台可以注意到,执行了两次SQL查询。

使用缓存

<cache/>   <!--添加此标签-->
    <select id="getDeviceById" resultType="org.ongoal.tun.demos.entity.Device" useCache="true">  <!--加上useCache="true"属性 -->
 select * from device where device_id = #{i} </select>
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@25ff2dda] was not registered for synchronization because synchronization is not active
Cache Hit Ratio [org.ongoal.tun.demos.mapper.DeviceMapper]: 0.0
JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@74786914] will not be managed by Spring
==>  Preparing: select * from device where device_id = ?
==> Parameters: 1(Long)
<==    Columns: device_id, device_name, source_id, sort_num, del_flag, create_by, update_by, create_time, update_time
<==        Row: 1, 开发数据1, 1750083747497119745, 0, 0, null, null, null, null
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@25ff2dda]
2024-03-14 16:49:47.078  INFO 27412 --- [nio-8080-exec-1] o.o.t.d.service.Impl.DeviceServiceImpl   : ======================
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558bce46] was not registered for synchronization because synchronization is not active
Cache Hit Ratio [org.ongoal.tun.demos.mapper.DeviceMapper]: 0.5
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558bce46]

可以看到第一次是执行了SQL,第二次是使用了缓存里面的值返回。

实际开发中,一般用的也不多,因为它的颗粒度比较高,是mapper级别的,并发情况下,也可能导致数据不一致情况。只有特定场合,觉得有必要,那才会使用此二级缓存

 

标签:开启,device,二级缓存,synchronization,SqlSession,mybatis,where,id,select
From: https://www.cnblogs.com/qwg-/p/18073272

相关文章

  • mybatis中常见的动态SQL标签
    在xml中写动态SQL的的时候,有一些常见的,如if、foreachSELECTa.*,c.product_nameFROMwork_orderaLEFTJOINproductcONa.product_code=c.product_codeANDc.del_flag=0wherea.del_flag=0<iftest="orderQueryReq.productCode......
  • mybatis plus saveBatch报错问题
    sessionRecordHumanService.saveBatch(dataList);具体报错如下:org.mybatis.spring.MyBatisSystemException:nestedexceptionisorg.apache.ibatis.exceptions.PersistenceException: ###Errorupdatingdatabase.Cause:java.lang.IllegalArgumentException:MappedSta......
  • XM22010-3直流电源设备:开启高效稳定供电
    XM22010-3直流电源设备:稳定输出,高效供电新典范在直流电源领域,稳定、高效的供电设备是确保各类电子设备正常运行的关键。XM22010-3直流电源设备以其出色的稳定性和高效性,成为市场上的佼佼者。XM22010-3直流电源设备采用了先进的电源转换技术和智能控制算法,能够实现稳定、连续......
  • mybatis oracle数据库批量插入数据,忽略主键重复
    dao方法IntegerinsertPackagesNew(@Param("list")List<InfCollectpackage>list);mapper.xml<insertid="insertPackagesNew"parameterType="java.util.List">MERGEINTOINF_COLLECTPACKAGEAUSING(&......
  • MyBatis原理解析
    MyBatis入门的四行代码 //<1>加载配置文件 InputStreamis=Resources.getResourceAsStream("mybatis.xml"); //<2>创建sessionFactory对象 sessionFactory=newSqlSessionFactoryBuilder().build(is); //<3>获取sqlSession对象信息SqlSessionsessio......
  • MyBatis拦截器执行流程!!!
    前提:将自定义的拦截器注入IOC容器。1、创建自定义拦截器,实现Interceptor接口,重写interceptor()方法2、在自定义拦截器上使用@Interceptors注解,在该注解中使用@Signature指定拦截的接口类型,方法名与参数类型。实例:/**Copyright(c)2020,2024,Allrightsreserved.......
  • Mybatis20_MyBatis核心配置文件深入7
    一、typeHandler概述无论是MyBatis在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成Java类型。下表描述了一些默认的类型处理器(截取部分)。你可以重写类型处理器或创建你自己的类型处理器来......
  • 开启线程处理数据,提高响应速度
    //此线程类必须实现Runnable接口publicclassXmzNoticeErrorThreadimplementsRunnable{privateICertImportErrorRecServiceiErrorRecService=ContainerFactory.getContainInfo().getComponent(ICertImportErrorRecService.class);privatei......
  • Mybatis Plus(上篇)
    1.MybatisPlus工作流程:扫描实体类,通过反射进行抽取,然后分析表与实体类的关系,以及属性与当前字段的关系,然后再根据当前调用的方法生成对应的SQl,然后注入到容器中结论:根据你的实体类,里面有啥它就分析啥用啥2.用mabatisplus必须在启动类里,写@MapperScan("xxxxxxxx.mapper")......
  • ②【MyBatis】 Mapper代理方式开发( 常用 )
    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~个人主页:.29.的博客学习社区:进去逛一逛~②【MyBatis】Mapper代理方式⚪使用Mapper代理方式开发1.Mapper接口与SQL映射文件2.设置映射文件namespace......