首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当执行select .默认情况下进行更新吗?

当执行select .默认情况下进行更新吗?
EN

Stack Overflow用户
提问于 2017-05-05 04:36:36
回答 1查看 3.3K关注 0票数 0

我知道mybatis有缓存,默认执行update时它会刷新缓存。那么,当执行select...for更新时,它会刷新缓存吗?如果答案是否定的,那么如果我首先执行select,然后立即执行select...for更新,那么mybatis将访问数据库还是访问缓存?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-05 13:55:13

缓存刷新默认行为与实际执行的SQL无关,而是与执行的Myb提斯语句的类型有关。

无论<select>@Select中的SQL是什么,当没有指定flushCache属性(为了注释样式而进入@Options )时,默认行为将应用:不刷新。对于<update>@Update,默认情况下缓存是刷新的。

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

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

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

在会话期间,当重复请求相同的数据(相同的语句/参数)时,不需要存储下一次使用的结果,只需再次调用语句,缓存就可以保存对DB的访问。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43796609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档