Mybatis使用collection标签实现一对多关联查询,返回结果集list中嵌套list

简介: Mybatis使用collection标签实现一对多关联查询,返回结果集list中嵌套list


  • 实体类
class PlatForm{
  private String id;
  private String code;
  ....
  private List<TatgetUser> tatgetUsers; // 一对多 集合
}

方式一 查询一次但分页不正确

  • 查询sql

关联查询

select
a.id
,a.code
,a.full_name
,a.simple_name
,a.depart
,a.platform
,a.intPOdlJCe
,a.logo
,a.value_explanation
,c.id as tid
,c.target_code as targetCode
,c.target_name as targetName
from rd_plat_form a
left join rd_plate_target b on a.code = b.plate_code  -- 中间表关联
left join rd_target_user c on b.target_code = C.target_code
  • mapper
<resultMap id="BaseResultMap" type="com.xxx.modules.xxx.entity.PlatForm " >
    <id column="id"      property="id"      jdbcType="VARCHAR" />
    <result column="code" property="code" jdbcType="VARCHAR" />
    <result column="logo"    property="logo"    jdbcType="VARCHAR" />
    <collection property="talgetUsers" javaType="java.util.ArrayList" ofType="com.xxx.modules.xxx.entity.TatgetUser"/>
      <!--TatgetUser 实体属性-->
      <!--id 起别名因为,主类PlatForm有id 重复了-->
      <id column:"tid" property="id"/>
      <result column:"talgetCode" property="tatgetCode"/>
      <result column:"talgetName" property="talgetName"/>
    </collection>
</resultMap>
  • 返回时属性tatgetUsers(自动封装成list)

以上方式只查询一次但是分页不正确


方式二 查询多次但分页正确

以下方式查询多次但是分页正确

<resultMap id="BaseResultMap" type="com.xxx.modules.xxx.entity.PlatForm " >
    <id column="id"      property="id"      jdbcType="VARCHAR" />
    <result column="code" property="code" jdbcType="VARCHAR" />
    <result column="logo"    property="logo"    jdbcType="VARCHAR" />
    <collection property="talgetUsers" javaType="java.util.ArrayList" ofType="com.xxx.modules.xxx.entity.TatgetUser" 
    select="com.xxx.modules.xxx.mapper.TatgetUserMapper.selectList" column="{platCode=code,source = id}"/>
</resultMap>
  • talgetUsers:一方实体类中属性(List集合)
  • ofType:映射一点多中 多方的实体
  • select:多次查询即多方的mapper中方法
  • column:关联字段
  • platCode:字段别名,多方条件里用
  • code:一方的字段

  • 多方:TatgetUserMapper
<mapper namespace="com.xxx.modules.xxx.mapper.TatgetUserMapper">
 <!-- 查询列表 -->
 <select id="selectList" resultType="TargetUser">
     SELECT
      a.id, a.plat_code platCode, a.plat_name platName
     FROM
      tatget_user AS a
     <where>
      a.plat_Code = #{platCode} <!-- 变量名 platCode对应上文的 platCode -->
      and a.source  = #{source} <!-- 变量名 source对应上文的 source -->
     </where>
 </select>

可以不用实现接口方法


相关文章
|
9月前
|
SQL XML Java
MyBatis Mapper中使用limit参数的查询问题
总结而言,MyBatis中使用 `limit`参数的查询可以高度定制并且灵活,基于方法签名和XML映射文件的组合来达成多样化的查询需求。通过参数化查询和动态SQL,MyBatis可以有效地处理各种复杂情境下的数据库操作,并且将SQL语句的维护与业务代码的编写相分离,提升代码的可维护性和可阅读性。
774 13
|
10月前
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
557 1
|
算法
你对Collection中Set、List、Map理解?
你对Collection中Set、List、Map理解?
228 18
你对Collection中Set、List、Map理解?
|
XML Java 数据库连接
Mybatis一对一,一对多关联查询
## MyBatis一对一、一对多关联查询详解 MyBatis是一款优秀的持久层框架,提供了灵活的SQL映射功能,支持复杂的数据库操作。本文将详细介绍MyBatis中一对一和一对多关联查询的实现。 ### 一对一关联查询 一对一关联关系指的是一个表中的一条记录与另一个表中的一条记录相关联。例如,一个用户有一个地址信息。 #### 数据库表设计 假设有两个表:`user`和 `address`。 ``` CREATE TABLE user ( id INT PRIMARY KEY, name VARCHAR(50) ); CREATE TABLE address
536 18
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
1800 6
|
XML Java 数据库连接
Mybatis实现RBAC权限模型查询
通过对RBAC权限模型的理解和MyBatis的灵活使用,我们可以高效地实现复杂的权限管理功能,为应用程序的安全性和可维护性提供有力支持。
462 5
|
SQL Java 数据库连接
spring和Mybatis的各种查询
Spring 和 MyBatis 的结合使得数据访问层的开发变得更加简洁和高效。通过以上各种查询操作的详细讲解,我们可以看到 MyBatis 在处理简单查询、条件查询、分页查询、联合查询和动态 SQL 查询方面的强大功能。熟练掌握这些操作,可以极大提升开发效率和代码质量。
512 3
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1941 1
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
552 1