mybatis一级缓存
1.resultMap映射null问题
2.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>
如果更改配置:
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的缓存时可以做一下更改:
- 将一级缓存关闭,默认开启且为session级别,设置local-cache-scope: statement
- 局部控制每条SQL,在mapper文件SQL语句后设置flushCache="true"
注意:在mybatis与spring整合需要开启事务的时候才能使用到缓存,如果方法没有@Transactional注解不会走缓存,原因是加了事务注解后关闭自动提交,如果不开启每条sql执行完毕之后都会将缓存删除,@Transactional的作用是将同一个数据库连接的提交操作延迟,统一在整个事务执行完毕之后提交
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~