mybatis一级缓存

一级缓存

默认:

mybatis默认开启一级缓存,且local-cache-scope默认session级别,默认关闭二级缓存

配置如下:

mybatis关闭二级缓存,一级缓存作用范围为session;查询语句也没有使用flushCache=“true”(默认false)==>所以使用了缓存,但是这样直接操作缓存对象,下一次查询出来的是被修改后的缓存对象

mybatis:
  # 搜索指定包别名
  typeAliasesPackage: com.wpp.platform.**.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # 配置mybatis的缓存,延迟加载等等一系列属性
  configuration:
    cache-enabled: false	// 关闭二级缓存
    local-cache-scope: session
<select id="selectModelPowerMenusData" resultType="com.wpp.platform.predictedData.domain.ModelPowerDO">
    select manufacturer, model, turbines_no as turbinesNo
    from wind_turbines_test t;
</select>

image

如果更改配置:

  configuration:
    cache-enabled: false	// 关闭二级缓存
    local-cache-scope: statement

这样相当于禁用了一级缓存,会重新查询不会走缓存

同样当设置flushCache=“true”时也会清除缓存,mybatis默认也是flushCache=“false”,当有增删改操作时会清除缓存

<select id="selectModelPowerMenusData" resultType="com.wpp.platform.predictedData.domain.ModelPowerDO" flushCache="true">
    select manufacturer, model, turbines_no as turbinesNo
    from wind_turbines_test t;
</select>

所以我们不想使用mybatis的缓存时可以做一下更改:

  1. 将一级缓存关闭,默认开启且为session级别,设置local-cache-scope: statement
  2. 局部控制每条SQL,在mapper文件SQL语句后设置flushCache="true"

注意:在mybatis与spring整合需要开启事务的时候才能使用到缓存,如果方法没有@Transactional注解不会走缓存,原因是加了事务注解后关闭自动提交,如果不开启每条sql执行完毕之后都会将缓存删除,@Transactional的作用是将同一个数据库连接的提交操作延迟,统一在整个事务执行完毕之后提交

posted @   好滴都  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示