MybatisPlus查询一对多list结果collection实例
前言
查询用户信息,结果放到一个实体类里
这个实体类里有两个List<对象>字段,分别是这个用户的角色列表、岗位列表
以下仅供参考
实体类
package cn.daenx.myadmin.system.vo;
import cn.daenx.myadmin.system.po.SysPosition;
import cn.daenx.myadmin.system.po.SysRole;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.List;
/**
* 用户信息
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SysUserVo {
private String id;
/**
* 部门ID
*/
private String deptId;
/**
* 部门名称
*/
private String deptName;
/**
* 真实姓名
*/
private String realName;
/**
* 年龄
*/
private String age;
/**
* 性别,0=女,1=男,2=未知
*/
private String sex;
/**
* 个人简介
*/
private String profile;
/**
* 个性签名
*/
private String userSign;
/**
* 头像
*/
private String avatar;
/**
* 账户余额
*/
private Integer money;
/**
* 用户昵称
*/
private String nickName;
/**
* 用户账号
*/
private String username;
/**
* 账号状态,0=正常,1=停用,2=注销
*/
private Integer status;
/**
* 用户手机号
*/
private String phone;
/**
* 邮箱
*/
private String email;
/**
* 微信open_id
*/
private String openId;
/**
* 锁定结束时间
*/
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime banToTime;
/**
* 到期时间,null则永不过期
*/
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime expireToTime;
/**
* 备注
*/
@TableField(value = "remark")
private String remark;
/**
* 用户类型ID
*/
private String userTypeId;
/**
* 用户类型名称
*/
private String userTypeName;
/**
* 创建时间
*/
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
/**
* 修改时间
*/
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime updateTime;
/**
* 创建人账号
*/
private String createName;
/**
* 创建人ID
*/
private String createId;
/**
* 修改人账号
*/
private String updateName;
/**
* 修改人ID
*/
private String updateId;
/**
* 用户角色列表
*/
private List<SysRole> roles;
/**
* 用户岗位列表
*/
private List<SysPosition> positions;
/**
* 是否是管理员
*/
private Boolean admin;
}
xml
<select id="getUserInfoByUserId" resultMap="userInfoMap">
SELECT su.id AS id,
su.dept_id AS deptId,
sd.`name` AS deptName,
sud.real_name AS realName,
sud.age AS age,
sud.sex AS sex,
sud.`profile` AS `profile`,
sud.user_sign AS userSign,
sud.avatar AS avatar,
sud.money AS money,
sud.nick_name AS nickName,
su.username AS username,
su.`status` AS `status`,
su.phone AS phone,
su.email AS email,
su.open_id AS openId,
su.ban_to_time AS banToTime,
su.expire_to_time AS expireToTime,
su.remark AS remark,
su.user_type_id AS userTypeId,
sut.`name` AS userTypeName,
su.create_time AS createTime,
su.update_time AS updateTime,
su1.username AS createName,
su.create_id AS createId,
su2.username AS updateName,
su.update_id AS updateId
FROM sys_user su
LEFT JOIN sys_user_detail sud ON sud.user_id = su.id
LEFT JOIN sys_dept sd ON sd.id = su.dept_id
LEFT JOIN sys_user_type sut ON sut.id = su.user_type_id
LEFT JOIN sys_user su1 ON su1.id = su.create_id
LEFT JOIN sys_user su2 ON su2.id = su.update_id
WHERE su.is_delete = 0
<if test="userId != null and userId != ''">
AND su.id = #{userId}
</if>
</select>
<resultMap id="userInfoMap" type="cn.daenx.myadmin.system.vo.SysUserVo">
<result column="id" jdbcType="VARCHAR" property="id"/>
<collection property="roles" column="id" select="queryUserRoles"></collection>
<collection property="positions" column="id" select="queryUserPositions"></collection>
</resultMap>
<select id="queryUserRoles" resultType="cn.daenx.myadmin.system.po.SysRole">
SELECT sr.*
FROM sys_role_user sru
LEFT JOIN sys_role sr ON sru.role_id = sr.id
WHERE sru.user_id = #{id}
</select>
<select id="queryUserPositions" resultType="cn.daenx.myadmin.system.po.SysPosition">
SELECT sp.*
FROM sys_position_user spu
LEFT JOIN sys_position sp ON spu.position_id = sp.id
WHERE spu.user_id = #{id}
</select>
效果

其他方法
百度mprelation
MybatisPlus查询一对多list结果collection实例的更多相关文章
- Mybatis 之级联查询 一对多配置
Mybatis级联 查询相对于hibenate是有点麻烦,但是相应好处也是有的,Mybatis轻量.根据自己要的字段配置方便 一对多配置用 <collection property=&quo ...
- mybatis报错:查询一对多或多对多时只返回一条数据的问题
问题: 使用映射文件实现查询一对多或多对多时只返回一条数据问题 解决方法: 导致这种情况出现的问题是因为两个表中的主键是一样所以出现了数据覆盖问题. 解决方式一:修改数据库表中的主键(这种方法比较麻烦 ...
- linq 实现group by 不使用group关键字 等同lambad表达式中的group join 查询一对多关系
return from orderInfo in orderEntity.x_s_orderInfo join oState in orderEntity.x_s_oStatuInfo on orde ...
- MybatisPlus多表连接查询一对多分页查询数据
一.序言 在日常一线开发过程中,多表连接查询不可或缺,基于MybatisPlus多表连接查询究竟该如何实现,本文将带你找到答案. 在多表连接查询中,既有查询单条记录的情况,又有列表查询,还有分页查询, ...
- Mybatis夺标关联查询一对多实例
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC " ...
- mybatis实战教程二:多对一关联查询(一对多)
多对一关联查询 一.数据库关系.article表和user表示多对一的关系 CREATE TABLE `article` ( `id` ) NOT NULL AUTO_INCREMENT, `user ...
- mybatis ---- 级联查询 一对多 (集合映射)
关联有嵌套查询和嵌套结果两种方式,本文是按照嵌套结果这种方式来说明的 上一章介绍了多对一的关系,用到了<association></association>,这是一个复杂类型的 ...
- 转: Hibernate HQL查询 插入 更新(update)实例
1.实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql=”from User user ”;List list=session.CreateQuery(hq ...
- mybatis07--关联查询一对多
案例 查询国家的同时,查询出国家下的省会信息! 01.使用单表的连接查询 创建对应的实体类 和数据库表 /** * *国家的实体类 */ public class Country { privat ...
- Mybatis进阶学习笔记——关系查询——一对多查询
一个客户拥有多个订单 <resultMap type="User" id="UserOrderResultMap"> <id column=& ...
随机推荐
- 【数值计算方法】数值积分&微分-python实现
目录 数值积分 1. 引言 2. 几个常用积分公式及其复合公式 2.1 求积公式 2.2 代数精度 2.3 复合积分 2.4 常用积分公式的python实现 3. 变步长方法与外推加速技术 4. 牛顿 ...
- TPC-H 研究和优化尝试
TPC-H测试提供了8张表,最近做这个测试,记录下过程中的关键点备忘. 1.整体理解TPC-H 8张表 2.建立主外键约束后测试22条SQL 3.分区表改造,确认分区字段 4.重新测试22条SQL 5 ...
- windows nvm 切换node版本后,npm找不到
前言 在 windows 使用 nvm,管理 node 版本时,nvm install 14.21.3 后,发现在指定 node 版本的 node_modules 文件夹中没有对应的 npm 包,这时 ...
- MySQL 是否可以用 Docker 容器化?
容器 容器是为了解决 "在切换运行环境时,如何保证软件能够正常运行",容器是轻量级应用代码包,它包含在任何环境中运行所需的所有元素的软件包.容器可以虚拟化操作系统,包含依赖项,例如 ...
- golang 逃逸分析详解
疑问 请问main调用GetUserInfo后返回的&User{...}.这个变量是分配到栈上了呢,还是分配到堆上了? package main type User struct { ID i ...
- 探秘Transformer系列之(16)--- 资源占用
探秘Transformer系列之(16)--- 资源占用 目录 探秘Transformer系列之(16)--- 资源占用 文章总表 0x00 概述 0x01 背景知识 1.1 数据类型 1.2 进制& ...
- 鸿蒙NEXT开发案例:程序员计算器
[环境准备] • 操作系统:Windows 10 • 开发工具:DevEco Studio 5.0.1 Release Build Version: 5.0.5.306 • 目标设备:华为Mate60 ...
- 智能Agent如何改造传统工作流:从搜索到全能助手
智能Agent如何改造传统工作流:从搜索到全能助手 引言:当AI遇上工作流 还记得我们以前搜索信息的方式吗?输入关键词,浏览大量结果,筛选有用内容,再整合成我们需要的答案.这个过程不仅耗时,还常常让人 ...
- C# 13 中的新增功能实操
前言 今天大姚带领大家一起来看看 C# 13 中的新增几大功能,并了解其功能特性和实际应用场景. 前提准备 要体验 C# 13 新增的功能可以使用最新的 Visual Studio 2022 版本或 ...
- 【Java】基本语法
一.语言概述 整体语言概述 (一)Java语言概述 1.基础常识 软件:即一系列按照特定顺序组织的计算机数据和指令的集合.分为:系统软件 和 应用软件 系统软件:windows , mac os , ...