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

news2024/9/23 9:26:53

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

/**
     * 标签
     */
    private List<BasicResidentTags> tags;

原来的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>
        </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
        from basic_resident b LEFT JOIN basic_resident_tags t
        on b.resident_id = t.resident_id
        where del_flg = '0'
        <if test="param.name != null and param.name != ''">
            and b.name like concat('%',#{param.name},'%')
            or
            b.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_id
        limit #{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="resident_id" 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
        from basic_resident b LEFT JOIN basic_resident_tags t
        on b.resident_id = t.resident_id
        where del_flg = '0'
        <if test="param.name != null and param.name != ''">
            and b.name like concat('%',#{param.name},'%')
            or
            b.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_id
        limit #{query.pageNum},#{query.pageSize}
    </select>
    
    <!--子查询-->
    <select id="selectTagsByResidentId" resultType="com.vkl.basic.domain.BasicResidentTags">
        select * from basic_resident_tags where resident_id=#{residentId}
    </select>

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

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

相关文章

(2)Mission Planner概述

文章目录 前言 2.1 什么是Mission Planner 2.2 历史 2.3 支持 2.4 浏览文档 前言 Mission Planner 是 ArduPilot 开源自动驾驶仪项目的全功能地面站应用程序。本页包含 Mission Planner 的背景信息和本网站的组织结构。 2.1 什么是Mission Planner Mission Planner 是用于…

Nginx动静分离、资源压缩、负载均衡、黑白名单、防盗链等实战

一、前言 Nginx是目前负载均衡技术中的主流方案&#xff0c;几乎绝大部分项目都会使用它&#xff0c;Nginx是一个轻量级的高性能HTTP反向代理服务器&#xff0c;同时它也是一个通用类型的代理服务器&#xff0c;支持绝大部分协议&#xff0c;如TCP、UDP、SMTP、HTTPS等。 二、…

搭建微服务基础环境

创建使用会员微服务模块-service consumer 3.1需求分析 浏览器向service consumer请求某个数据&#xff0c;service consumer会去向service provider请求数据&#xff0c;然后将service provider返回的数据返回给浏览器。 添加数据同理。 3.2思路分析 创建Module&#xff0…

全光谱对眼睛视力好不好?全光谱对眼睛的影响

什么是全光谱&#xff1f;全光谱指的是光谱中包含紫外光、可见光、红外光的光谱曲线&#xff0c;并且在可见光部分中红绿蓝的比例与阳光近似&#xff0c;显色指数Ra接近于100的光谱。与普通LED相比&#xff0c;全光谱LED光谱更加连续&#xff0c;色域更广泛。简单来说&#xff…

c语言结构体知识系统详解

本篇文章带来结构体相关知识与结构体内存对齐的规则详细讲解&#xff01; 如果您觉得文章不错&#xff0c;期待你的一键三连哦&#xff0c;你的鼓励是我创作的动力之源&#xff0c;让我们一起加油&#xff0c;一起奔跑&#xff0c;让我们顶峰相见&#xff01;&#xff01;&…

广州华锐互动:水利数字孪生智能管理系统的特色

水利数字孪生智能管理系统是一种基于数字孪生的新型水利管理工具&#xff0c;它通过将现实世界中的水利设施和设备数字化&#xff0c;并在虚拟环境中进行模拟和分析&#xff0c;为水利管理者提供更加直观、精准的决策支持。该系统具有以下亮点&#xff1a; 首先&#xff0c;水利…

你有英语成绩或证书吗?申请中国人民大学与加拿大女王大学金融硕士是否需要英语?

随着经济全球化的发展&#xff0c;英语的重要性也愈发明显。英语作为世界通用程度较高的语言&#xff0c;在传播本国文化及国际交往中起着不可替代的作用。中国综合国力的巨大提升&#xff0c;让世界开始认真倾听来自中国的声音。这样的现实背景之下&#xff0c;我们强调中国文…

Python(四十五)二层循环中的break和continue

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

HBase Compaction 原理与线上调优实践

作者&#xff1a;vivo 互联网存储技术团队- Hang Zhengbo 本文对 HBase Compaction 的原理、流程以及限流的策略进行了详细的介绍&#xff0c;列举了几个线上进行调优的案例&#xff0c;最后对 Compaction 的相关参数进行了总结。 一、Compaction 介绍 HBase 是基于一种 LSM-…

数据结构:手撕图解七大排序(含动图演示)

文章目录 插入排序直接插入排序希尔排序 选择排序选择排序堆排序 交换排序冒泡排序快速排序hoare版挖坑法前后指针法快速排序的递归展开图快速排序的优化三数取中法 快速排序的非递归实现 归并排序 插入排序 插入排序分为直接插入排序和希尔排序&#xff0c;其中希尔排序是很值…

python面试题(一)

如果无聊&#xff0c;可以查看这篇文章~ 使用python做一些奇奇怪怪的事情&#xff1f;_什么时候才能变强的博客-CSDN博客https://blog.csdn.net/qq_17496235/article/details/131906360 问&#xff1a;什么是Python的GIL&#xff08;全局解释器锁&#xff09;&#xff1f;它对…

如何以毫秒精度,查看系统时间以及文件的创建时间

用 cmd 查看系统的时间&#xff1a; powershell -command "(Get-Date -UFormat %Y-%m-%d %H:%M:%S).toString() . ((Get-Date).millisecond)" 用 XYplorer 查看文件的精确创建时间&#xff08;含30天试用&#xff09;&#xff1a; XYplorer - File Manager for …

基于拉格朗日-遗传算法的最优分布式能源DG选址与定容(Matlab代码实现)

目录 1 概述 2 数学模型 2.1 问题表述 2.2 DG的最佳位置和容量&#xff08;解析法&#xff09; 2.3 使用 GA 进行最佳功率因数确定和 DG 分配 3 仿真结果与讨论 3.1 33 节点测试配电系统的仿真 3.2 69 节点测试配电系统仿真 4 结论 1 概述 为了使系统网损达到最低值&a…

系统学习Linux-MySQL用户权限管理(三)

一、用户权限管理概述 数据库用户权限管理是数据库系统中非常重要的一个方面&#xff0c;它用于控制不同用户访问和操作数据库的权限范围。数据库用户权限管理可以保护敏感数据和数据库结构&#xff0c;确保只有被授权的用户才可以操作和使用数据库&#xff0c;防止数据被修改…

Qt之切换语言的方法(传统数组法与Qt语言家)

http://t.csdn.cn/BVigB 传统数组法&#xff1a; 定义一个字符串二维数组&#xff0c; QString weekStr[2][7] {"星期一","星期二","星期三","星期四","星期五","星期六","星期日",\ "Monday&…

2023级中国社科院美国杜兰大学中外合作办学双证能源管理硕士

2023级中国社科院美国杜兰大学中外合作办学双证能源管理硕士 作为国内首个且唯一侧重能源金融交易的硕士项目&#xff0c;中国社会科学院大学与美国杜兰大学合作举办的能源管理硕士&#xff08;Master of Management in Energy&#xff09;项目旨在培养具备国际视野的高级能源…

基于XDMA 中断模式的 PCIE3.0 QT上位机与FPGA数据交互架构 提供工程源码和QT上位机源码

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案图像产生、发送、缓存数据处理XDMA简介XDMA中断模式图像读取、输出、显示QT上位机及其源码 5、vivado工程详解6、上板调试验证7、福利&#xff1a;工程代码的获取 1、前言 PCIE&#xff08;PCI Express&#…

权威认可丨九州未来获科学技术成果登记证书

近日&#xff0c;由九州未来自主研发的工业项目——“5G”边缘计算云平台的产品研究及其在工业视觉AI设计中的应用&#xff0c;经评审、公示获准登记&#xff0c;取得浙江省科技厅颁发的科学技术成果登记证书。 伴随我国在新基建领域不断推进深入&#xff0c;5G以其特有的大带宽…

Vue教程(三):计算属性

1、姓名案例—插值语法版 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>姓名案例-插值语法版</title><script type"text/javascript" src"../js/vue.js"><…

IDEA中文UT方法执行报错问题、wps默认保存格式

wps默认保存格式、IDEA中文UT方法执行报错问题 背景 1、wps修改文件后&#xff0c;编码格式从UTF-8-bom变成UTF-8&#xff08;notepad可以查看&#xff09;&#xff1b; 2、IDEA中文UT执行报错&#xff1a; 解决方案 1、语言设置中不要勾选 “Beta版。。。。” 2、cmd中执…