`
redhair1109
  • 浏览: 3750 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

MyBatis关联查询,其中关联表有数据更新,如解决缓存更新的问题

    博客分类:
  • java
阅读更多
最近开发项目遇到一个问题,大致情况如下:
使用MyBatis
select a.*,b.* from A a left join B b where a.b_id = b.id 对应的是AMapper.xml,这个数据被缓存了,若A表有更新,它的缓存也会被清掉,这是正常的。
update B set ......(此处省略了,就是更新B表) 对应的是BMapper.xml

执行操作,先执行上面的update更新B,然后执行上面的select关联查询,由于有缓存,查询出来的结果还是原来的,也就是说更新的B表时,select关联查询的缓存并不会更新。

查询了一些资料:
说明:在mybatis下每个mapper的namespace对应一个cache,也就是说一个cahce的id就是mapper的namespace, 当mapper中select 标签中使用useCache=true,那么该select语句就会被保存到cache中,某一个namespace下的某一个select语句可能会有不同的参数值,所以mybatis会分别把不同参值的sql查询结果保存到cache中去,也就是说同一个namespace下的同一个select语句会对应N个不同的cache,当前mybatis的缓存flush机制是得到namespace对应的缓存后直接clear, 这个的话,同一个namespace下的所有select语句所对应的缓存都被刷新。

了解这些后就可以解决这个问题了,解决的办法的是:把更新B表的update的语句放到AMapper.xml中,这样的话在AMapper.xml做更新B的操作,也就会刷新A的缓存,这样再去select关联查询B表就可以查询到更新后的数据了。
分享到:
评论

相关推荐

    mybatis自关联查询

    自关联查询就是当一个实体类(如 Category)需要引用自身来表示这种关系时所采用的方法。 1. 实体类设计: 首先,我们需要创建 Category 类,其中包含 ID、名称等属性,并添加一个 List<News> 的属性来表示所属的...

    mybatis关联查询问题(一对多、多对一)

    在这个场景中,"mybatis关联查询问题(一对多、多对一)"是核心关注点,这涉及到数据库设计中的关系映射以及在Mybatis中如何处理这些关系。 1. **一对多关联**: 在数据库设计中,一对多关联是指一个表中的记录可以...

    mybatis关联查询多对多查询案例

    在IT领域,MyBatis作为一个...博客内容应该详细解释了如何在MyBatis中实现多对多关联查询的各个步骤,包括示例代码和可能出现的问题及解决方案。通过研究这些资源,你可以深入理解并掌握MyBatis多对多查询的实践技巧。

    实现Mybatis框架中一对多关联映射的查询操作。

    通过以上步骤,Mybatis能够根据配置的映射规则,自动将查询结果中的多条订单数据转化为User对象中的Order列表,从而实现了1-N关联映射的查询操作。在实际项目中,这样的设计使得数据的获取和处理更为便捷,降低了...

    mybatis关联映射源码

    MyBatis会根据配置自动执行JOIN查询,将两个表的数据合并到一个对象中。在`chapter10_oneToOne`文件中,你可以找到相关的示例代码和解释,了解如何配置和使用这种映射。 接着,我们讨论**一对多**(OneToMany)关联...

    mybatis 的高级关联查询源码

    这里可以编写一个带有参数的 SQL 语句,通过主表的 ID 或其他关联字段来查询子表的数据。 3. **动态 SQL** MyBatis 提供了强大的动态 SQL 功能,允许我们在 SQL 查询中使用条件判断。这在处理复杂的关联查询时非常...

    完整版 Java开发实训课程系列-MyBatis框架技术 03.MyBatis关联映射查询与缓存配置(共25页).pptx

    【MyBatis框架关联映射查询与缓存配置】 MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。在Java开发中,MyBatis简化了DAO(Data Access Object)层的开发工作,使得开发者能够更专注于...

    支持连表查询的mybatis-plus

    1. **连表查询基础**:在SQL中,连表查询是将两个或多个表的数据关联在一起进行查询,常见的有内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。这些连接方式可以根据不同...

    MyBatis 二级缓存 关联刷新实现

    MyBatis 二级缓存 关联刷新实现1、MyBatis缓存介绍2、二级缓存问题2.1、数据不一致问题验证2.2、问题处理思路3、关联缓存刷新实现 1、MyBatis缓存介绍  Mybatis提供对缓存的支持,但是在没有配置的默认情况下,它只...

    Mybatis多对多关联查询

    MyBatis还支持级联操作,如`CascadeType.SAVE_UPDATE`,这允许我们在保存或更新主表时,同时处理关联表的数据。在MyBatis的Mapper接口中,我们可以定义这样的方法: ```java public void saveStudentWithCourses...

    Mybatis的关联映射和缓存机制

    Mybatis的关联映射和缓存机制

    Mybatis延迟加载和缓存

    为了解决这个问题,Mybatis 提供了延迟加载功能,使得关联对象在调用相关方法时才加载,提高程序性能。 实现延迟加载,首先需要在映射文件中开启该功能,并正确配置关联关系。例如: ```xml ``` 这里 `orders...

    Mybatis高级映射查询

    10. 缓存:Mybatis 内置了缓存机制,分为一级缓存(SqlSession 级别)和二级缓存(Mapper 级别),可以有效提高查询效率,减少对数据库的访问。 以上就是 Mybatis 高级映射查询的相关知识点,这些特性使得 Mybatis ...

    SSM框架的学习与应用-Java EE企业级应用开发学习记录(第四天)Mybatis的关联映射和缓存机制

    SSM框架的学习第四天-MyBatis关联映射和缓存机制 深度对MyBatis关联映射进行深入学习,包括MyBatis缓存机制、配置文件、映射文件的使用。 本文可以归类为MyBatis框架的学习教程,其核心主题是带领读者深入掌握MyBatis...

    MyBatis高级映射(多对多查询)

    在处理复杂的数据关系时,如多对多关联查询,MyBatis提供了高效且易用的解决方案。本篇文章将深入探讨MyBatis在处理多对多查询时的高级映射技巧。 首先,理解多对多关系。在数据库设计中,多对多关系意味着一个表中...

    mybatis061 多表查询

    本专题将深入探讨MyBatis的一对多关联查询,以"mybatis061 多表查询"为例,旨在帮助你理解和掌握如何在实际项目中实现多表数据的联合检索。 首先,了解一对多关系:在数据库设计中,一对多关系是指一个表中的记录...

    mybatis3--延迟加载,缓存

    - 考虑到数据一致性,对于经常更新的数据,可能不适合开启二级缓存。 - 缓存的大小和存活时间可以通过 MyBatis 配置进行调整,避免内存溢出。 - 使用 `@CacheNamespaceRef` 注解可以使多个 Mapper 共享一个二级缓存...

    MyBatis基本使用总结

    MyBatis内置了本地缓存和二级缓存,可以提高数据读取的效率。本地缓存作用于单个SqlSession,而二级缓存则可以在多个SqlSession之间共享。通过配置,我们可以选择启用或禁用缓存,以及调整缓存的过期策略。 总结,...

    MyBatis的关联映射-资料.rar

    9. **关联映射的性能优化**:通过合理设计关联映射,如避免N+1查询问题,使用子查询或连接查询,以及利用缓存机制,可以显著提升数据检索的效率。 总的来说,MyBatis的关联映射功能使得数据库操作变得更加灵活,...

    MyBatis多表连接

    本文将深入探讨MyBatis如何处理多表连接查询,结合具体的实例,包括学生表、课程表和关系表,来阐述这个主题。 首先,我们需要了解在SQL中,多表连接是用于从多个相关的表中获取数据的关键方法。MyBatis通过动态SQL...

Global site tag (gtag.js) - Google Analytics