【mybatis】一对多查询

server/2025/1/24 11:49:39/

书接上文,当多表查询,为了一个查询出全部,使用了GROUP_CONCAT和json_object函数,但是当数据量过大时,需要更改mysql的数据库配置,调大group_concat_max_len配置参数。

但是项目中可能存在线上数据库不让重启,或者是线上数据库参数不让动的情况

使用以下方法实现,一次查询,一对多

类结构:类Group和类GroupUser

表:group、group_user_ref、user

Group.java

@Entity
@Table(name = "group")
@Data
public class Group {@Id@Column(name = "group_id")private int groupId;……其他字段@OneToMany@JoinColumn(name = "group_id")private List<GroupUser> userInfo;}

GroupUser .java

@Entity
@Data
public class GroupUser {@Id@Column(name = "user_id")private String userId;@Column(name = "LOGIN_ID")private String loginId;@Column(name = "USER_NAME")private String userName;@Column(name = "MOBILE")private String mobile;@Column(name = "ORG_IDS")private String orgIds;
}

GroupMapper.java

    List<Group>  getAllGroups(@Param("page")int page,@Param("size")int size,@Param("searchWords")String searchWords);

GroupMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.GroupMapper"><resultMap id="BaseResultMap" type="com.bean.Group"><id property="groupId" column="group_id"/><--其他字段--><collection property="userInfo" column="group_id"select="com.mapper.GroupMapper.selectUserByGroupId"></collection></resultMap><select id="selectUserByGroupId" parameterType="java.lang.Integer" resultType="com.bean.GroupUser">select u.user_id,u.LOGIN_ID, u.USER_NAME, u.MOBILE, u.ORG_IDS FROM group_user_ref r left join user u on r.user_id = u.user_id WHERE group_id = #{groupId}
</select><select id="getAllGroups" resultMap="BaseResultMap">SELECT g.*,org.ORG_NAME as orgNameFROM group g where 1=1<if test="searchWords != null and searchWords != ''">AND g.group_name LIKE CONCAT('%', #{searchWords}, '%')</if>GROUP BY g.group_idorder by g.group_id asc limit #{page},#{size}</select>

重点:

1.Group类中,一对多字段注解

@OneToMany
@JoinColumn(name = "group_id")

2.Mapper中使用collection标签,使用select查询,通过group_id关联,一次查询出关联表对应user和user信息


http://www.ppmy.cn/server/161010.html

相关文章

高质量编程 性能优化学习笔记

高质量编程 & 性能优化学习笔记 目录 高质量编程 编程原则编码规范 性能优化 性能优化建议实战pprof性能调优案例 自动内存管理 常见内存管理方式 Go内存管理及优化 Go内存分配Go内存管理优化 编译器和静态分析 编译器静态分析 Go编译器优化 函数内联逃逸分析…

深入探索 Nginx 的高级用法:解锁 Web 服务器的强大潜能

在当下互联网技术飞速发展的浪潮中&#xff0c;Nginx 凭借其轻量级、高性能的特性&#xff0c;在 Web 服务器和反向代理服务器领域脱颖而出&#xff0c;成为众多开发者和运维工程师的得力工具。它不仅能高效处理静态资源&#xff0c;在负载均衡、反向代理等方面也表现出色。然而…

深入探索Python人脸识别技术:从原理到实践

一、引言在当今数字化时代,人脸识别技术已然成为了计算机视觉领域的璀璨明星,广泛且深入地融入到我们生活的各个角落。从门禁系统的安全守护,到金融支付的便捷认证,再到安防监控的敏锐洞察,它的身影无处不在,以其高效、精准的特性,极大地提升了我们生活的便利性与安全性…

靠右行驶数学建模分析(2014MCM美赛A题)

笔记 题目 要求分析&#xff1a; 比较规则的性能&#xff0c;分为light和heavy两种情况&#xff0c;性能指的是 a.流量与安全 b. 速度限制等分析左侧驾驶分析智能系统 论文 参考论文 两类规则分析 靠右行驶&#xff08;第一条&#xff09;2. 无限制&#xff08;去掉了第一条…

Ubuntu如何安装redis服务?

环境&#xff1a; Ubuntu22.04 WSL2 问题描述&#xff1a; 如何安装redis服务&#xff1f; 解决方案&#xff1a; 1.在 Linux 上&#xff08;如 Ubuntu/Debian&#xff09;安装 1.通过包管理工具安装 Redis 服务器&#xff1a; sudo apt update sudo apt install redis…

LeetCode:37. 解数独

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;37. 解数独 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff…

智慧农业——温湿,土壤,风速风向,降雨量 传感器监视平台

基于温湿、土壤、风速风向、降雨量传感器的智慧农业监视平台具有多方面的优点&#xff0c;主要体现在精准监测、智能决策、提升产量与品质、降低成本与风险等方面&#xff0c;以下是具体介绍&#xff1a; - **精准监测方面** - **实时数据获取**&#xff1a;能够实时采集农…

5_高并发内存池项目内存优化、页号与Span映射关系使用基数树优化及测试性能与malloc、free比较

申请/释放 内存大小申请方式释放方式x≤256KB&#xff08;32页&#xff09;向ThreadCache申请释放给ThreadCache32页<x≤128页向PageCache申请释放给PageCachex&#xff1e;128页向堆申请释放给堆 一、解决大于256KB的大块内存申请 &#xff08;一&#xff09;申请大于256…