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>

可以不用实现接口方法


相关文章
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
12月前
|
SQL XML Java
Mybatis的<where>,<if>等标签用法
这篇文章详细解释了Mybatis中<where>和<if>等标签的用法,展示了如何在SQL动态构建中有效地过滤条件和处理逻辑分支。
763 1
|
12月前
|
SQL Java 数据库连接
Mybatis入门(select标签)
这篇文章介绍了Mybatis中`select`标签的基本用法及其相关属性,并通过示例展示了如何配置和执行SQL查询语句。
227 0
Mybatis入门(select标签)
|
12月前
|
SQL Java 数据库连接
Mybatis的<insert>,<update>,<delete>标签用法
这篇文章详细讲解了Mybatis中<insert>, <update>, <delete>标签的使用方法,并提供了示例代码来展示如何执行数据库的增删改操作。
1029 0
|
存储 Java 数据库连接
mybatis精讲(三)--标签及TypeHandler使用
mybatis精讲(三)--标签及TypeHandler使用
|
SQL Java 数据库连接
MyBatis Mapper.XML 标签使用说明
MyBatis Mapper.XML 标签使用说明
143 0
|
NoSQL Java Redis
Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
|
SQL Java 数据库连接
Mybatis查询 出现Unknow colum 'xxxx' in field list 解决办法
Mybatis查询 出现Unknow colum 'xxxx' in field list 解决办法
如何将Doris的COLLECT_LIST结果用在另一个查询的条件语句里
【4月更文挑战第21天】如何将Doris的COLLECT_LIST结果用在另一个查询的条件语句里
392 0