最近开发项目遇到一个问题,大致情况如下:
使用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表就可以查询到更新后的数据了。
分享到:
相关推荐
自关联查询就是当一个实体类(如 Category)需要引用自身来表示这种关系时所采用的方法。 1. 实体类设计: 首先,我们需要创建 Category 类,其中包含 ID、名称等属性,并添加一个 List<News> 的属性来表示所属的...
在这个场景中,"mybatis关联查询问题(一对多、多对一)"是核心关注点,这涉及到数据库设计中的关系映射以及在Mybatis中如何处理这些关系。 1. **一对多关联**: 在数据库设计中,一对多关联是指一个表中的记录可以...
在IT领域,MyBatis作为一个...博客内容应该详细解释了如何在MyBatis中实现多对多关联查询的各个步骤,包括示例代码和可能出现的问题及解决方案。通过研究这些资源,你可以深入理解并掌握MyBatis多对多查询的实践技巧。
通过以上步骤,Mybatis能够根据配置的映射规则,自动将查询结果中的多条订单数据转化为User对象中的Order列表,从而实现了1-N关联映射的查询操作。在实际项目中,这样的设计使得数据的获取和处理更为便捷,降低了...
MyBatis会根据配置自动执行JOIN查询,将两个表的数据合并到一个对象中。在`chapter10_oneToOne`文件中,你可以找到相关的示例代码和解释,了解如何配置和使用这种映射。 接着,我们讨论**一对多**(OneToMany)关联...
这里可以编写一个带有参数的 SQL 语句,通过主表的 ID 或其他关联字段来查询子表的数据。 3. **动态 SQL** MyBatis 提供了强大的动态 SQL 功能,允许我们在 SQL 查询中使用条件判断。这在处理复杂的关联查询时非常...
【MyBatis框架关联映射查询与缓存配置】 MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。在Java开发中,MyBatis简化了DAO(Data Access Object)层的开发工作,使得开发者能够更专注于...
1. **连表查询基础**:在SQL中,连表查询是将两个或多个表的数据关联在一起进行查询,常见的有内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。这些连接方式可以根据不同...
MyBatis 二级缓存 关联刷新实现1、MyBatis缓存介绍2、二级缓存问题2.1、数据不一致问题验证2.2、问题处理思路3、关联缓存刷新实现 1、MyBatis缓存介绍 Mybatis提供对缓存的支持,但是在没有配置的默认情况下,它只...
MyBatis还支持级联操作,如`CascadeType.SAVE_UPDATE`,这允许我们在保存或更新主表时,同时处理关联表的数据。在MyBatis的Mapper接口中,我们可以定义这样的方法: ```java public void saveStudentWithCourses...
Mybatis的关联映射和缓存机制
为了解决这个问题,Mybatis 提供了延迟加载功能,使得关联对象在调用相关方法时才加载,提高程序性能。 实现延迟加载,首先需要在映射文件中开启该功能,并正确配置关联关系。例如: ```xml ``` 这里 `orders...
10. 缓存:Mybatis 内置了缓存机制,分为一级缓存(SqlSession 级别)和二级缓存(Mapper 级别),可以有效提高查询效率,减少对数据库的访问。 以上就是 Mybatis 高级映射查询的相关知识点,这些特性使得 Mybatis ...
SSM框架的学习第四天-MyBatis关联映射和缓存机制 深度对MyBatis关联映射进行深入学习,包括MyBatis缓存机制、配置文件、映射文件的使用。 本文可以归类为MyBatis框架的学习教程,其核心主题是带领读者深入掌握MyBatis...
在处理复杂的数据关系时,如多对多关联查询,MyBatis提供了高效且易用的解决方案。本篇文章将深入探讨MyBatis在处理多对多查询时的高级映射技巧。 首先,理解多对多关系。在数据库设计中,多对多关系意味着一个表中...
本专题将深入探讨MyBatis的一对多关联查询,以"mybatis061 多表查询"为例,旨在帮助你理解和掌握如何在实际项目中实现多表数据的联合检索。 首先,了解一对多关系:在数据库设计中,一对多关系是指一个表中的记录...
- 考虑到数据一致性,对于经常更新的数据,可能不适合开启二级缓存。 - 缓存的大小和存活时间可以通过 MyBatis 配置进行调整,避免内存溢出。 - 使用 `@CacheNamespaceRef` 注解可以使多个 Mapper 共享一个二级缓存...
MyBatis内置了本地缓存和二级缓存,可以提高数据读取的效率。本地缓存作用于单个SqlSession,而二级缓存则可以在多个SqlSession之间共享。通过配置,我们可以选择启用或禁用缓存,以及调整缓存的过期策略。 总结,...
9. **关联映射的性能优化**:通过合理设计关联映射,如避免N+1查询问题,使用子查询或连接查询,以及利用缓存机制,可以显著提升数据检索的效率。 总的来说,MyBatis的关联映射功能使得数据库操作变得更加灵活,...
本文将深入探讨MyBatis如何处理多表连接查询,结合具体的实例,包括学生表、课程表和关系表,来阐述这个主题。 首先,我们需要了解在SQL中,多表连接是用于从多个相关的表中获取数据的关键方法。MyBatis通过动态SQL...