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>

可以不用实现接口方法


相关文章
|
2月前
|
Java 数据库连接 数据库
mybatis查询数据,返回的对象少了一个字段
mybatis查询数据,返回的对象少了一个字段
176 8
|
18天前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
13 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
23天前
|
SQL Java 数据库连接
mybatis如何仅仅查询某个表的几个字段
【10月更文挑战第19天】mybatis如何仅仅查询某个表的几个字段
23 1
|
2月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
2月前
|
算法
你对Collection中Set、List、Map理解?
你对Collection中Set、List、Map理解?
36 5
|
4月前
|
Java 数据库连接 mybatis
Mybatis查询传递单个参数和传递多个参数用法
Mybatis查询传递单个参数和传递多个参数用法
64 11
MyBatisPlus如何根据id批量查询?Required request parameter ‘id‘ for method 解决方法是看青戈大佬MybatisPlus的教程
MyBatisPlus如何根据id批量查询?Required request parameter ‘id‘ for method 解决方法是看青戈大佬MybatisPlus的教程
|
5月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
892 1
|
4月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
|
4月前
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。