Mybatis使用collection映射一对多查询分页问题

场景:页面展示列表,需要查询多的字段,和一的字段。并且还要分页。
这时候直接想到的是手写sql。
在这里插入图片描述

/*** 标签*/private List<BasicResidentTags> tags;
@Data
@TableName("basic_resident_tags")
public class BasicResidentTags{private static final long serialVersionUID=1L;/*** 标签id*/@TableId(value = "id",type = IdType.AUTO)private Integer id;/*** 名称*/private String name;/*** 颜色*/private String color;/*** 居民id*/private Integer residentId;}

原来的sql 。

<!--一对多映射--><resultMap id="many" type="com.vkl.basic.domain.vo.admin.BasicResidentListVo"><id property="residentId" column="resident_id"/><result property="name" column="name"/><result property="sex" column="sex"/><result property="houseHolder" column="house_holder"/><result property="residentName" column="resident_name"/><result property="outsider" column="outsider"/><result property="room" column="room"/><collection property="tags" ofType="com.vkl.basic.domain.BasicResidentTags"><id column="tagsId" property="id"></id><result column="tagsName" property="name"></result><result column="color" property="color"></result><result column="tid" property="residentId"></result></collection></resultMap>
<select id="selectPageList" resultType="com.vkl.basic.domain.vo.admin.BasicResidentListVo" resultMap="many"parameterType="com.vkl.basic.domain.bo.admin.BasicResidentAdminBo">select b.resident_id,b.`name`,b.sex,b.house_holder,b.resident_name,b.outsider,b.room,t.id as tagsId,t.`name` as tagsName,t.color,t.resident_id as tidfrom basic_resident b LEFT JOIN basic_resident_tags ton b.resident_id = t.resident_idwhere del_flg = '0'<if test="param.name != null and param.name != ''">and b.name like concat('%',#{param.name},'%')orb.resident_name like concat('%',#{param.name},'%')</if><if test="param.tags != null and param.tags != ''">and t.name = #{param.tags}</if>order by b.resident_idlimit #{query.pageNum},#{query.pageSize}</select>

在这里插入图片描述
正常查询tags有两条。加上分页条件,多的一端只有一条数据。
在这里插入图片描述
修改之后的sq。满足分页正常展示多的一端。

<!--一对多映射--><resultMap id="many" type="com.vkl.basic.domain.vo.admin.BasicResidentListVo"><id property="residentId" column="resident_id"/><result property="name" column="name"/><result property="sex" column="sex"/><result property="houseHolder" column="house_holder"/><result property="residentName" column="resident_name"/><result property="outsider" column="outsider"/><result property="room" column="room"/><collection property="tags" ofType="com.vkl.basic.domain.BasicResidentTags"column="tid" select="selectTagsByResidentId"></collection></resultMap><!--主查询条件--><select id="selectPageList" resultType="com.vkl.basic.domain.vo.admin.BasicResidentListVo" resultMap="many"parameterType="com.vkl.basic.domain.bo.admin.BasicResidentAdminBo">select b.resident_id,b.`name`,b.sex,b.house_holder,b.resident_name,b.outsider,b.room,t.id as tagsId,t.`name` as tagsName,t.color,t.resident_id as tidfrom basic_resident b LEFT JOIN basic_resident_tags ton b.resident_id = t.resident_idwhere del_flg = '0'<if test="param.name != null and param.name != ''">and b.name like concat('%',#{param.name},'%')orb.resident_name like concat('%',#{param.name},'%')</if><if test="param.tags != null and param.tags != ''">and t.name = #{param.tags}</if>order by b.resident_idlimit #{query.pageNum},#{query.pageSize}</select><!--子查询--><select id="selectTagsByResidentId" resultType="com.vkl.basic.domain.BasicResidentTags">select * from basic_resident_tags where resident_id=#{tid}</select>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/12331.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud微服务实战——搭建企业级开发框架(五十三):微信小程序授权登录增加多租户可配置界面

GitEgg框架集成weixin-java-miniapp工具包以实现微信小程序相关接口调用功能&#xff0c;weixin-java-miniapp底层支持多租户扩展。每个小程序都有唯一的appid&#xff0c;weixin-java-miniapp的多租户实现并不是以租户标识TenantId来区分的&#xff0c;而是在接口调用时&#…

C#如何使用SQLite数据库?

文章目录 0.引言1.SQLite工具准备2.创建窗体项目并添加SQLite的命名空间3.编写使用SQLite代码4.结果展示 0.引言 SQLite是一个轻量级的嵌入式数据库&#xff0c;它的库文件非常小巧&#xff0c;不需要独立的服务器进程或配置。这使得它非常适合在资源受限的环境中使用&#xff…

【Terraform学习】Terraform-AWS部署快速入门(快速入门)

Terraform-AWS部署快速入门 实验步骤 连接到 Terraform 环境 SSH 连接到Terraform 环境(名为MyEC2Instance的实例) 在 Amazon Web Services &#xff08;AWS&#xff09; 上预置 EC2 实例 用于描述 Terraform 中基础结构的文件集称为 Terraform 配置。您将编写一个配置来定义…

防御第三天

1.总结当堂NAT与双机热备原理&#xff0c;形成思维导图 2.完成课堂NAT与双机热备实验 fw1: <USG6000V1>sy [USG6000V1]int g0/0/0 [USG6000V1-GigabitEthernet0/0/0]ip add 192.168.18.2 24 [USG6000V1-GigabitEthernet0/0/0]service-manage all permit (地址无所谓&…

设计模式适合用于解决特定的软件设计问题呢

当我们在开发软件时&#xff0c;经常会遇到各种各样的问题和挑战&#xff0c;例如如何处理对象之间的关系、如何实现复杂的业务逻辑、如何处理并发访问等。这些问题都是软件设计中经常遇到的问题&#xff0c;而设计模式就是为了解决这些问题而诞生的。 以下是一些常见的软件设…

SpringCloud学习路线(11)——分布式搜索ElasticSeach场景使用

一、DSL查询文档 &#xff08;一&#xff09;DSL查询分类 ES提供了基于JSON的DSL来定义查询。 1、常见查询类型&#xff1a; 查询所有&#xff1a; 查询出所有的数据&#xff0c;例如&#xff0c;match_all全文检索&#xff08;full text&#xff09;查询&#xff1a; 利用…

leetcode 50. Pow(x, n)(x的n次方)

求x的n次方。 思路&#xff1a; 第一个想到的思路是x和它自己乘n次&#xff0c; 但是这样做会面临一些问题&#xff1a; 如果是简单的n很小的情况还好&#xff0c;但是可以看到n的取值横跨整个整数范围&#xff0c; 如果n非常大&#xff0c;一次一次乘x效率低是其一。 一般来…

探索网页原型设计:构建出色的用户体验

在当今数字化时代&#xff0c;用户对网页体验的要求日益提高。在网页设计过程中&#xff0c;扮演着至关重要的角色。通过网页原型设计&#xff0c;产品经理能够更好地展示和传达网页的整体布局、导航结构、元素位置和交互效果&#xff0c;从而使团队成员更清晰地了解设计意图&a…

mapboxGL中楼层与室内地图的结合展示

概述 质量不够&#xff0c;数量来凑&#xff0c;没错&#xff0c;本文就是来凑数的。前面的几篇文章实现了楼栋与楼层单体化的展示、室内地图的展示&#xff0c;本文结合前面的几篇文章&#xff0c;做一个综合的展示效果。 实现效果 实现 1. 数据处理 要实现上图所示的效果…

Excel透视表与python实现

目录 一、Excel透视表 1、源数据 2、数据总分析 3、数据top分析 二、python实现 1、第一张表演示 2、第二张表演示 一、Excel透视表 1、源数据 1&#xff09;四个类目&#xff0c;每类50条数据 2&#xff09;数据内容 2、数据总分析 1&#xff09;选择要分析的字段&…

leetcode做题笔记46

给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 思路一&#xff1a;回溯 void swap(int *nums,int index1,int index2) {int temp nums[index1];nums[index1] nums[index2];nums[index2] temp; }void prem(int* nu…

已经重新安装了MySQL,第一次应该如何登录root用户

如果已经重新安装了MySQL&#xff0c;第一次登录root用户需要按照以下步骤进行&#xff1a; 1. 打开命令行终端或控制台。 2. 通过一下命令启动MySQL服务器&#xff1a; sudo systemctl start mysql3. 登录MySQL服务器&#xff1a; sudo mysql -u root 如果服务器在本地主…

vue项目登录页面实现记住用户名和密码

vue项目登录页面实现记住用户名和密码 记录一下实现的逻辑&#xff0c;应该分两步来理解这个逻辑 首次登录&#xff0c;页面没有用户的登录信息&#xff0c;实现逻辑如下&#xff1a; 用户输入用户名和密码登录&#xff0c;用户信息为名为form的响应式对象&#xff0c;v-model…

Linux Day03

一、基础命令(在Linux Day02基础上补充) 1.10 find find 搜索路径 -name 文件名 按文件名字搜索 find 搜索路径 -cmin -n 搜索过去n分钟内修改的文件 find 搜索路径 -ctime -n搜索过去n分钟内修改的文件 1&#xff09;按文件名字 2&#xff09;按时间 1.11 grep 在文件中过…

linux+Jenkins+飞书机器人发送通知(带签名)

文章目录 如何使用在linux 上安装python 环境发送消息python脚本把脚本上传倒linux上 jenkins 上执行脚本 如何使用 自定义机器人使用指南飞书官网https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot 在linux 上安装python 环境 yum install python3 python…

yolov5检测到的框画到原图上

1.把检测到的框画到原图上 import warnings warnings.filterwarnings(ignore) warnings.simplefilter(ignore) import torch import cv2 import numpy as np import requests import torchvision.transforms as transformsfrom models.common

“深入解析Spring Boot:从入门到进阶“

标题&#xff1a;深入解析Spring Boot&#xff1a;从入门到进阶 摘要&#xff1a;本文将深入解析Spring Boot框架&#xff0c;从入门到进阶&#xff0c;帮助开发者更好地理解和应用Spring Boot。内容包括Spring Boot的基本概念、核心特性、常用组件和高级用法&#xff0c;并提…

如何在3ds max中创建可用于真人场景的巨型机器人:第 5 部分

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. After Effects 中的项目设置 步骤 1 打开“后效”。 打开后效果 步骤 2 我有真人版 我在After Effects中导入的素材。这是将 用作与机器人动画合成的背景素材。 实景镜头 步骤 3 有背景 选定的素材…

Mindar.JS——实现AR图像追踪插入图片或视频

Mindar.JS使用方式 注意&#xff1a;此篇文章需要启动https才可调用相机权限 图像追踪示例 需要用到两个js库 <script src"./js/aframe.min.js"></script><script src"./js/mindar-image-aframe.prod.js"></script>下面看一下标签…

原生js vue react通用的递归函数

&#x1f642;博主&#xff1a;锅盖哒 &#x1f642;文章核心&#xff1a;原生js vue react通用的递归函数 目录大纲 1.递归函数的由来 2.代码逻辑 1.递归函数的由来 递归函数的由来可以追溯到数学中的递归概念和数学归纳法。 在数学中&#xff0c;递归是指通过定义基本情况和…