Mybatis一对多关联查询,返回结果集list中嵌套list实例(collection实现)

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

1.问题描述

最近在使用SpringBoot框架开发Web层项目时遇到的一个小问题,需要查询一个对象(A)的数据内容到另一个对象(B)中的list集合中,将对象(B)的数据展示在页面上。

2.解决方法

解决方法:主要使用mybatis中的 collection 来解决,解决方法如下所示:

用户domain:
public class User implements Serializable{
	private Integer id;
	private String name;//用户名
	private String sex;//性别
	private Integer roleId;  //外键角色id
	private List<Role> roleList;//角色列表
	...
}
角色domain:
public class Role implements Serializable{
	private Integer id;
	private String rolename;//角色名
	private String remark;//角色描述
	...
}

UserMapper.xml文件

<resultMap id="BaseResultMap" type="ep.cms.febs.system.domain.User" >
    <id column="id" property="id" jdbcType="INTEGER" />
    <result column="name" property="name" jdbcType="VARCHAR" />
    <result column="sex" property="sex" jdbcType="VARCHAR" />
    <collection property="roleList" resultMap="BatchListResultMap" />
  </resultMap>
  <resultMap id="BatchListResultMap" type="ep.cms.febs.system.domain.Role">
    <id column="r_id" property="id" jdbcType="INTEGER" />
    <result column="rolename" property="rolename" jdbcType="VARCHAR" />
    <result column="remark" property="remark" jdbcType="VARCHAR" />
    <id column="userId" property="id" jdbcType="INTEGER" />
  </resultMap>

接下来就是SQL语句的写法

<select id="findUserDetail" resultMap="BaseResultMap" parameterType="ep.cms.febs.system.domain.User">
    SELECT
    u.id,
    u.name,
    u.sex,
    r.id r_id,
    r.rolename,
    r.remark,
    r.userId
    FROM
    t_user as u
    LEFT JOIN r_role as r ON (r.userId = u.id)
  </select>

3.特别提醒

如果两个表中存在一样的字段名称 , 一定要用别名生成一个其他名称在result中的column中,例如user表中和role表中, 都存在 id 名称一样的字段 , 将role表中的id用别名换成 r_id。

4.运行结果

{
  "code": 2,
  "message": "查询用户信息成功",
  "data": {
    "total": 3,
    "rows": [
      {
        "id": 1,
        "name": "admin",
        "sex": "男",
        "roleList": [
          {
            "id": 1,
            "rolename": "admin",
            "remark": "管理员",
            "userId": 1
          },
          {
            "id": 2,
            "rolename": "user",
            "remark": "用户",
            "userId": 1
          },
          {
            "id": 3,
            "rolename": "test",
            "remark": "测试",
            "userId": 1
          }
        ]
      }
    ]
  }
}

5.总结

在写XML语句的时候一定要注意==两个表查询出来的字段名称一定不能重复,有重复的起别名来区分。==好了,最后运行结果是这样,希望对你们有所帮助!有问题的可以在底下留言,看到会回复。

  • 12
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农辰南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值