mybatis动态sql一对多查询
在数据库设计中,一对多关系是非常多的,例如消息通知和附件,一个消息通知中往往会包含多个附件,这种情况下使用mybatis动态sql可以很方便的查询出来。
1、数据库设计
消息表:sys_message
CREATE TABLE `sys_message` (`id` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL,`title` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '标题',`content` mediumtext COLLATE utf8mb4_unicode_ci COMMENT '内容',`message_fk` varchar(40) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '附件fk'PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='消息管理';
附件表:sys_attachment
CREATE TABLE `sys_attachment` (`id` varchar(40) NOT NULL COMMENT '主键',`file_name` varchar(50) NOT NULL COMMENT '原文件名',`storing_name` varchar(100) NOT NULL COMMENT '存储文件名',`size` bigint(20) NOT NULL COMMENT '大小',`fk` varchar(40) NOT NULL COMMENT '业务主键',`suffix_type` tinyint(4) DEFAULT NULL COMMENT '类型(后缀)',`file_type` tinyint(4) DEFAULT '0' COMMENT '文件类型:0其他 1图片 2视频',`url` varchar(200) NOT NULL COMMENT '访问地址',`absolute_path` varchar(200) NOT NULL COMMENT '绝对路径',PRIMARY KEY (`id`)
)
一条消息对应多个附件,附件表中的 fk引用消息表的message_fk。
2、实现
返回类型是Message对象,其中有一个 List<SysAttachment> fileList,存储附件信息。
public class SysMessage extends LaboratoryBaseModel<SysMessage> {private static final long serialVersionUID=1L; @TableField("id")private String id;@TableField("title")private String title;@TableField("content")private String content;@TableField("message_fk")private String messageFk;@TableField(exist = false)private List<SysAttachment> fileList;}
这种情况下,在动态sql的标签中,返回值只能使用resultMap属性接收:
<select id="selectMessagePage" resultMap="sysMessageMap">SELECT*FROMsys_message a
</select>
resultMap是一个外部结果映射关系的引用,描述了结果数据的映射关系,在resultMap中有一个 collection标签,分别是:
- column:message表的message_fk,即一对多的一中被引用的字段名
- property:SysMessage中fileList属性,属性名是fileList
- javaType:SysMessage中fileList属性的对应的java类型Arraylist
- ofType:javaType的数据类型SysAttachment
- select:需要引用的select标签的名字,
<select id="selectFileByFk">
实际上, collection标签的含义是:对于每一条【消息查询】的结果,都要根据message_fk去到执行select属性中的查询语句,将查询结果封装到fileList属性。其中column属性会当作参数传递<select id="selectFileByFk">标签中。
<resultMap id="sysMessageMap" type="cn.xxx.model.SysMessage"><result property="id" column="id"/><result property="title" column="title"/><result property="content" column="content"/><result property="messageFk" column="message_fk"/><collection column="message_fk"property="fileList"javaType="Arraylist"ofType="cn.yibiao163.laboratory.model.SysAttachment"select="selectFileByFk"></collection></resultMap>
<select id="selectFileByFk" resultMap="cn.xxx.repository.SysAttachmentMapper.sysAttachmentMap">select * from sys_attachment where is_deleted = 0 and fk = #{message_fk}
</select>
<select id="selectFileByFk" 标签中,使用了resultMap="cn.yibiao163.laboratory.repository.SysAttachmentMapper.sysAttachmentMap",除了resultMap还有一个 resultType属性,可以配置一个java类,用来转换sql语句执行的结果。应用如下:
<select id="selectFileByFk" resultType="cn.xxx.model.SysAttachment">select * from sys_attachment where is_deleted = 0 and fk = #{message_fk}
</select>
public class SysAttachment extends LaboratoryBaseModel<SysAttachment> {private static final long serialVersionUID=1L;@TableField("file_name")private String fileName;@TableField("storing_name")private String storingName;@TableField("size")private Long size;@TableField("fk")private String fk;@TableField("suffix_type")private String suffixType;@TableField("file_type")private Integer fileType;@TableField("url")private String url;@TableField("absolute_path")private String absolutePath;}
3、完整mapper.xml
<resultMap id="sysMessageMap" type="cn.yibiao163.laboratory.model.SysMessage"><result property="id" column="id"/><result property="title" column="title"/><result property="content" column="content"/><result property="messageFk" column="message_fk"/><collection column="message_fk"property="fileList"javaType="Arraylist"ofType="cn.yibiao163.laboratory.model.SysAttachment"select="selectFileByFk"></collection>
</resultMap><select id="selectMessagePage" resultMap="sysMessageMap">SELECT*FROMsys_message a
</select><select id="selectFileByFk" resultType="cn.xxx.model.SysAttachment">select * from sys_attachment where is_deleted = 0 and fk = #{message_fk}
</select>
相关文章:
mybatis动态sql一对多查询
在数据库设计中,一对多关系是非常多的,例如消息通知和附件,一个消息通知中往往会包含多个附件,这种情况下使用mybatis动态sql可以很方便的查询出来。 1、数据库设计 消息表:sys_message CREATE TABLE sys_message (i…...
Leetcode.2316 统计无向图中无法互相到达点对数
题目链接 Leetcode.2316 统计无向图中无法互相到达点对数 rating : 1604 题目描述 给你一个整数 n n n ,表示一张 无向图 中有 n n n 个节点,编号为 0 0 0 到 n − 1 n - 1 n−1 。同时给你一个二维整数数组 e d g e s edges edges ,其…...
介绍机器学习中CatBoost工具的详细使用指南
在机器学习的动态世界中,Python 是创新背后的驱动力,专业人士必须使用正确的工具。CatBoost 就是这样一个工具,以其卓越的速度和准确性悄然改变了该领域。在本指南中,我们将深入研究 Python 3 中的 CatBoost,涵盖基础知识、高级技术和实际示例,包括使用示例数据集和绘图进…...
操作系统【OS】线程与进程的比较
进程 线程 是什么的单位? 是资源分配的基本单位 是调度的基本单位 不能共享什么? 不能共享虚拟地址空间 不能共享栈指针 可以共享什么? 拥有一个完整的资源平台 每个进程都有独立的地址空间和资源 除了共享全局变量,不允许其他进程访问 某进程中的线程…...
在Mac上使用安卓桌面模式
在安装Homeblew的基础上 替换国内源 export HOMEBREW_API_DOMAIN"https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api" export HOMEBREW_BREW_GIT_REMOTE"https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git" brew update 安装Scrcpy …...
YOLO目标检测——人脸口罩佩戴数据集【(含对应voc、coco和yolo三种格式标签】
实际项目应用:公共场所监控场景下的大密度人群检测是否佩戴口罩,以及戴口罩的人证比对(安检刷脸不用摘口罩)、手机解锁、刷脸考勤等身份认证场景。数据集说明:人脸口罩佩戴检测数据集,真实场景的高质量图片…...
mongodb如何多表查询,如同时查询店铺以及里面对应的商品
多表查询场景介绍 一种很常见的场景,比如电商首页中,需要同时展示最近比较火热的店铺,以及直接展示店铺里对应的商品。或者用户下单之后购物车里可以看到所选的商品以及对应的店铺。如果不知道如何用mongodb自带的查询语句快速查询的话&#…...
Linux环境修改服务器时间和网络时间保持一致
目录 介绍UTC和CST 修改时区 修改时间 介绍UTC和CST UTC是协调世界时,是全球统一的时间标准。UTC的时间是基于原子钟计算的,以秒为单位,不受夏令时等影响。世界各地都可以通过UTC来同步时间。 CST是中央标准时间,相当于UTC-6…...
CUDA学习笔记6——事件计时
事件计时 CUDA事件是直接在GPU上实现的,因此它们不适用于对同时包含设备代码和主机代码的混合代码计时。 cudaEventCreate 创建一个事件cudaEventRecord 记录一个事件cudaEventElapsedTime 计算两个事件之间经历的时间,第一个参数为某个浮点变量的地址…...
使用vscode调试ffmpeg源码
ffmpeg的编译配置 # --enable-debug 设置为调试级别 # --disable-stripping 如果不加此选项,会strip去掉符号信息 ./configure --prefix{output_path} --enable-debug --disable-stripping make -j10VSCode的配置 将以下文件对比替换工程.vscode目录下的相同文件 …...
微信小程序--数字化会议OA系统之首页搭建
一、Flex弹性布局 布局的传统解决方案,基于盒状模型,依赖 display属性 position属性 float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。 2009年,W3C提出了一种新的方案—-Flex布局,可…...
代码随想录算法训练营第六十天 | 739. 每日温度、496.下一个更大元素 I
739. 每日温度 链接: 代码随想录 (1)代码 496.下一个更大元素 I 链接: 代码随想录 (1)代码...
WebView 以及如何测试
混合应用 顾名思义,它们是本机应用程序和 Web 应用程序的混合体。它们可以在应用程序商店中下载,并且需要像本机应用程序一样从设备进行访问身份验证,但它们也有一个嵌入在应用程序中的浏览器(WebView)用于呈现 HTML。…...
Jetpack:013-Jetpack底部导航栏
文章目录 1. 概念介绍2. 使用方法2.1 NavigationBar2.2 NavigationBarItem 3. 示例代码3.1 代码和注释3.2 代码难点3.3 运行效果 4. 内容总结 我们在上一章回中介绍了Jetpack中弹出菜单相关的内容,本章回中将介绍 底部导航栏。闲话休提,让我们一起Talk …...
MATLAB - excel 读取
matlab中excel 读取 1. 写入excel文件 - xlswrite2. 读取excel文件 - xlsread 1. 写入excel文件 - xlswrite xlswrite(filename,A,sheet,xlRange) % 写入字符串 % 注意事项:Str需要是Cell格式,否则一个字母占一格 % Str {‘abc’}; xlswr…...
【AIGC核心技术剖析】Hotshot-XL 一种 AI 文本转 GIF 模型(论文 + 代码:经过训练可与Stable Diffusion XL一起使用)
Hotshot-XL 是一种 AI 文本转 GIF 模型,经过训练可与Stable Diffusion XL一起使用。 Hotshot-XL 可以使用任何经过微调的 SDXL 模型生成 GIF。这意味着两件事: 您将能够使用您可能想要使用的任何现有或新微调的 SDXL 模型制作 GIF。 如果您想制作个性化主题的 GIF,您可以…...
2023年9月青少年软件编程(C 语言) 等级考试试卷(八级)
2023年9月青少年软件编程(C 语言) 等级考试试卷(八级) 第 1 题 最短路径问题 平面上有n个点(n<100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。 若有连线࿰…...
MS17010(永恒之蓝)漏洞实战
曾因苦难多壮志,不教红尘惑坚心。 工具检测 实战过程 使用搜索命令,搜索ms17_010 search ms17_010 搜索网段中主机漏洞 use auxiliary/scanner/smb/smb_ms17_010 照例,show options 看一下配置 设置网段,run运行就行了 使用攻…...
ROS自学笔记十三:VScode的介绍和安装
Visual Studio Code(简称VS Code)是一款由Microsoft开发的免费、轻量级、开源的集成开发环境(IDE)。它支持多种编程语言,并且具有丰富的扩展系统,使得用户可以根据自己的需求自定义和扩展功能。 以下是VS …...
操作系统【OS】微内核
基本概念 微内核结构将操作系统划分为两大部分:微内核多个服务器微内核包含: 与硬件处理紧密相关的部分一些较基本的功能客户和服务器间的通信客户与服务器之间是借助微内核提供的消息传递机制来实现交互的 基本功能 进程管理 进程的通信、切换、调度…...
【手撕C++】string入门:字符串加法实战
目录 前言 题目:字符串相加(LeetCode 415) 思路:模拟竖式加法 完整代码1: 完善代码2: 代码逐行 测试用例 新手必看:方法全解坑 坑1:判断条件写错,导致数组越界 坑…...
免费-开源的API接口集合,用于你的练手项目
在开发练手项目时,获取真实数据往往是一个难题。无论是学习前端框架、后端开发,还是测试移动应用,免费且开源的API接口集合都能为你提供便捷的数据支持。这些API覆盖了天气、金融、社交、新闻等多个领域,无需注册或付费即可调用&a…...
MZmine 4.5.0:质谱数据处理架构优化与算法性能深度解析
MZmine 4.5.0:质谱数据处理架构优化与算法性能深度解析 【免费下载链接】mzmine3 mzmine source code repository 项目地址: https://gitcode.com/gh_mirrors/mz/mzmine3 在代谢组学和蛋白质组学研究领域,大规模质谱数据的处理效率直接决定了科研…...
Agent 工具一多就变慢?真正的瓶颈不是上下文窗口,而是工具路由失真
🧠 工具越多,为什么任务反而越慢 不少 Agent 团队在工具还少时,任务表现往往不差:读文件、查网页、跑命令三五个动作就能闭环。可一旦把浏览器、终端、搜索、代码执行、委派子代理都接进来,延迟和失败率常常一起上升。…...
GPU加速流体动力学模拟:从CPU到GPU的渐进式优化实践
1. 从CPU到GPU的流体动力学模拟加速实践作为一名长期从事高性能计算优化的工程师,我深知将传统CPU应用迁移到GPU平台时面临的挑战。以法国电力集团(EDF)的code_saturne流体动力学模拟软件为例,这个开源CFD工具自1997年开发以来&am…...
深耕民俗奇幻赛道!彭禺厶解锁竖屏短剧首秀,携《风水之王·我以狐仙镇百鬼》再续“驱邪传奇”
今日,奇幻民俗题材竖屏短剧《风水之王我以狐仙镇百鬼》正式开机,深耕该赛道多年、被誉为“民俗驱邪代言人”的演员彭禺厶惊喜亮相,解锁个人竖屏短剧首秀,瞬间点燃全网民俗奇幻爱好者的热情,相关话题快速升温。凭借《道…...
智慧树自动刷课插件:5步实现高效学习自动化
智慧树自动刷课插件:5步实现高效学习自动化 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树自动刷课插件是一款专为智慧树在线学习平台设计的Chrome浏…...
别再手写DFS遍历语法树了!用Tree-sitter Query像写SQL一样精准定位代码节点(Python实战)
用Tree-sitter Query像写SQL一样精准定位代码节点(Python实战) 当你需要从代码库中批量提取所有函数调用、特定赋值语句或错误节点时,是否还在手动编写递归遍历算法?传统方式不仅需要处理复杂的回溯逻辑,还要应对各种边…...
空洞骑士模组管理器Scarab终极指南:5分钟学会所有模组管理技巧
空洞骑士模组管理器Scarab终极指南:5分钟学会所有模组管理技巧 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 还在为空洞骑士模组安装的复杂流程而烦恼吗…...
手机存储速度翻倍的秘密:一文读懂UFS 2.2协议中的MIPI UniPro层
手机存储速度翻倍的秘密:一文读懂UFS 2.2协议中的MIPI UniPro层 当你在旗舰手机上秒开《原神》、连拍100张4800万像素照片却毫无卡顿时,背后是UFS 2.2存储协议与MIPI UniPro层的精密协作。这个藏在闪存芯片里的交通指挥系统,通过独特的CPort连…...
