mybatis 关联查询,其中一个关联表有数据更新,如何清理关联查询的缓存

发布于 2021-11-25 22:37:00 字数 717 浏览 1002 评论 12

1、select * from A ,对应AMapper.xml 这个数据被缓存了,若A表有更新,它的缓存也会被清掉,这是正常的。

2、select * from A inner join B  A.b_id=B.id   ,对应ABMapper.xml    若使用select语句,则相关数据也会被缓存。

问题来了,当A或B有更新的时候,只刷新了A或B表的缓存。此时并没有刷新ABMapper.xml中的关联查询的缓存。


所涉及的关键jar如下:

spymemcached-2.8.1.jar

mybatis-memcached-1.0.0-beta1-1210.jar

mybatis-3.1.1.jar

PS:

2个sql分别在不同的mapper.xml文件中。

每个mapper.xml都配置了

<cache eviction="LRU" type="org.mybatis.caches.memcached.MemcachedCache"/>

--------------------------------------------------------------------------------------------------------------

请问这个问题如何处理。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(12

筱武穆 2021-11-30 15:49:42

我目前也在解决这个问题,思路:通过配置+mybatis plugin机制来解决,mybatis的更新时缓存粒度比较粗,想更细的话可以自已实现。

屌丝范 2021-11-30 15:49:40

我知道的有两种办法:

1.如果ORM是xBatis或者jdbc,可以构建一个cache层,选择自己的缓存策略(本地缓存?分布式缓存?),尽在你的控制,只要缓存的粒度足够小,基本不会遇到你说的问题;

2.可以用Hibernate+ehCache,用的好性能据说也不错。

能否归途做我良人 2021-11-30 15:49:40

您上面说的“缓存策略”也同样会遇到我的这个问题。 现在使用hibernate的可能性不大,还是会选择mybatis。 即使用hubernate+ehCache我在猜想也可能会存在我刚才说的问题。

琴流音 2021-11-30 15:49:39

业务简单的话,是可以避免关联表的查询的。

可是我不能没有你 2021-11-30 15:49:37

用Mybatis就不要用关联了。我们早都不用关联了,用了出了问题都不知道从哪里找!!

奢华的一滴泪 2021-11-30 15:49:30

支持下,不是听说用ibatis的人很多吗?不知道他们如何解决的?

辞别 2021-11-30 15:49:08

1:更新删除操作的地方如需select,sqlSession.clearCache()下

2:尽量把他们放到一个mapper下

不再见 2021-11-30 15:46:20

1:更新删除操作的地方如需select,sqlSession.clearCache()下

2:尽量把他们放到一个mapper下

无人问我粥可暖 2021-11-30 15:39:09

http://www.iteye.com/topic/1112064 这个问题 用插件 或者 自己手动清除 目前其他的办法 好像没有  不建议关联查询呵呵

泪冰清 2021-11-30 12:33:33

我所知道的,目前没有很好的解决方案哦!呵呵 问问其他人

空城仅有旧梦在 2021-11-30 12:19:29

http://www.iteye.com/topic/1112064 这个问题 用插件 或者 自己手动清除 目前其他的办法 好像没有  不建议关联查询呵呵

梅窗月明清似水 2021-11-30 10:45:12

http://www.iteye.com/topic/1112064 这个问题 用插件 或者 自己手动清除 目前其他的办法 好像没有  不建议关联查询呵呵

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文