默认情况下执行select ... for update时mybatis是否刷新缓存?

时间:2017-05-05 04:36:36

标签: spring mybatis spring-mybatis

我知道mybatis有缓存,默认情况下执行更新时会刷新缓存。那么在执行select ... for update时它是否刷新缓存?如果答案为否,那么如果我首先执行select,然后立即执行select ... for update,mybatis将访问数据库或点击缓存?

1 个答案:

答案 0 :(得分:1)

缓存刷新默认行为与实际执行的SQL无关,而与执行的 Mybatis 语句类型无关。

无论<select>@Select中的SQL是什么,然后未指定flushCache属性(注释样式为@Options),默认行为适用:无刷新。并且默认情况下刷新<update>@Update缓存。

无论如何,在你的情况下,SELECTSELECT FOR UPDATE是不同的SQL字符串,然后在调用它们时,两个数据库都将被命中,即使结果集相同,缓存也会关联SQL字符串和结果的参数。更改SQL字符串=&gt;新命中,更改参数=&gt;新的热门。如果语句<select id=stmt1>和另一个语句<select id=stmt2>生成相同的SQL字符串并且使用相同的参数值调用,则在同一会话期间并且它们之间不会发生刷新操作,则第二个调用应该到达缓存。可以通过在mapper.namespace包上启用调试日志来检查这一点。

缓存不像ORM(Hibernate ..)那样工作:实体类型和主键引用的缓存。

缓存最多持续到会话结束。

在会话期间重复请求相同的数据(相同的语句/参数)很方便,不需要存储结果供下次使用,只需再次调用语句,缓存只会保存对DB的访问权限。< / p>