当前位置: 首页 > news >正文

MyBatis 中 SQL 片段复用

MyBatis 中 SQL 片段复用:提升代码效率与可维护性

在使用 MyBatis 进行数据库操作时,常常会遇到一些 SQL 语句的部分内容重复出现的情况,比如多个查询语句都涉及相同的字段列表。这时,MyBatis 的 SQL 片段复用功能就派上用场了。

一、SQL 片段复用的优势

代码的可维护性是软件开发中的重要考量因素。当相同的 SQL 片段分散在多个地方时,如果需要修改,例如字段名变更或者添加新的公共字段,就必须逐个修改涉及的 SQL 语句,这无疑增加了出错的风险且效率低下。而通过复用 SQL 片段,只需在定义片段的一处进行修改,所有引用该片段的 SQL 语句都会随之改变,大大提高了代码的可维护性。同时,也使得 SQL 代码结构更加清晰,提高了可读性。

二、定义 SQL 片段

在 MyBatis 的 XML 映射文件中,使用<sql>标签来定义 SQL 片段。例如,假设我们有一个User表,包含idusernamepasswordemail字段,若经常需要查询idusernameemail这几个字段,可如下定义 SQL 片段:

<sql id="userFields">id, username, email
</sql>

这里的id属性userFields是此 SQL 片段的唯一标识,后续引用时将依据此标识进行操作。

三、引用 SQL 片段

SELECT语句或其他需要使用该片段的地方,借助<include>标签来引用。比如要查询所有用户的idusernameemail信息,SQL 语句可这样编写:

<select id="selectAllUsers" resultMap="userResultMap">SELECT <include refid="userFields"/>FROM users
</select>

其中<include refid="userFields"/>会将之前定义的userFields SQL 片段的内容(即id, username, email)插入到当前SELECT语句中。

四、在动态 SQL 中使用 SQL 片段

SQL 片段在动态 SQL 场景下同样能发挥作用。例如,有一个根据条件查询用户的方法,有时只需查询idusername,有时则需查询idusernameemail。可按如下方式编写动态 SQL:

<select id="selectUsersByCondition" resultMap="userResultMap">SELECT<choose><when test="includeEmail"><include refid="userFields"/></when><otherwise>id, username</otherwise></choose>FROM usersWHERE 1 = 1<if test="username!= null">AND username LIKE '%${username}%'</if>
</select>

在此示例中,依据includeEmail参数的值决定是否引用包含email字段的 SQL 片段。若includeEmailtrue,则引用userFields片段,查询idusernameemail字段;否则仅查询idusername字段,同时还包含根据username条件进行筛选的动态 SQL 部分。

相关文章:

MyBatis 中 SQL 片段复用

MyBatis 中 SQL 片段复用&#xff1a;提升代码效率与可维护性 在使用 MyBatis 进行数据库操作时&#xff0c;常常会遇到一些 SQL 语句的部分内容重复出现的情况&#xff0c;比如多个查询语句都涉及相同的字段列表。这时&#xff0c;MyBatis 的 SQL 片段复用功能就派上用场了。…...

【实操GPT-SoVits】声音克隆模型图文版教程

项目github地址&#xff1a;https://github.com/RVC-Boss/GPT-SoVITS.git官方教程&#xff1a;https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/tkemqe8vzhadfpeu本文旨在迅速实操GPT-SoVits项目&#xff0c;不阐述技术原理&#xff08;后期如果有时间研究&#…...

用HTML和CSS实现3D圣诞树效果

简介 随着圣诞节的临近&#xff0c;许多开发者喜欢在自己的项目中加入一些节日氛围。今天&#xff0c;我们将学习如何使用HTML和CSS来实现一个简单的3D圣诞树效果。通过这些基本的前端技术&#xff0c;我们可以制作出富有创意的视觉效果&#xff0c;并为网站增添节日气氛。 本…...

Burp入门(10)-IP伪造插件

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址&#xff1a;IP伪造和爬虫审计_哔哩哔哩_bilibili 本文详细介绍IP伪造插件Burp Fake IP使用。 一、插件安装 打开Burp Suite。进入扩展标签页。点击添加&…...

Mac软件推荐

Mac软件推荐 截图SnipasteXnipBob 快捷启动Raycast 系统检测Stats 解压缩The UnarchiverKeka&#xff08;付费&#xff09; 视频播放IINA 视频下载Downie&#xff08;付费&#xff09; 屏幕刘海TopNotchMediaMate&#xff08;付费&#xff09;NotchDrop&#xff08;付费&#x…...

实验14 RNN的记忆能力和梯度爆炸实验

一 循环神经网络的记忆能力 1.数据集构建 创建了一个DigitSumDataset 类&#xff0c;包括初始化函数init、数据生成函数 generate_data、数据加载函数 load_data、__len__ 方法、__getitem__ 方法。 init函数&#xff1a;接受的参数是data_path&#xff08; 存放数据集的目录…...

LeetCode面试题04 检查平衡性

题目&#xff1a; 实现一个函数&#xff0c;检查二叉树是否平衡。在这个问题中&#xff0c;平衡树的定义如下&#xff1a;任意一个节点&#xff0c;其两棵子树的高度差不超过 1。 一、平衡树定义&#xff1a; 二叉树&#xff0c;一种由节点组成的树形数据结构&#xff0c;每…...

oracle归档模式下的快速热备方法-适合小库

在我们的一些小型的oracle生产库中&#xff0c;有些时候我们可以在不停库且不使用rman的情况下实现数据库的热备。该热备的原理是通过控制数据文件块头的scn号在备份时候不变化&#xff0c;进而保证备份的数据文件数据一致性。 一、环境 数据库版本&#xff1a; 数据库需要开启…...

【机器学习】【分子属性预测】——python读取.tar.gz文件(以OC22数据集为例)

1 Pre-knowledge .tar.gz 文件是一种常见的压缩文件格式&#xff0c;它实际上是两种压缩格式的组合&#xff1a;.tar 和 .gz。 .tar&#xff1a;这是“tape archive”的缩写&#xff0c;是一种打包&#xff08;archiving&#xff09;文件格式&#xff0c;用于将多个文件和目录…...

Qt中禁止或管理任务栏关闭窗口的行为

一、前言 作为一个合格的桌面程序&#xff0c;应该具备良好的资源释放的要求&#xff0c;即避免软件退出时&#xff0c;软件界面虽然消失&#xff0c;却假死在后台&#xff0c;只能通过任务管理器强行杀死。这意味着&#xff0c;程序无法通过正常操作进行退出&#xff0c;变成…...

docker的网络类型和使用方式

docker的网络类型 5种网络类型 bridge 默认类型&#xff0c;桥接到宿主机docker0的网络&#xff0c;有点类似于VM虚拟机的NAT网络模型。 案例: docker run --rm -itd --network bridge --name wzy666wzy-bridge alpine host host类型&#xff0c;共享宿主机的网络空间&#…...

二维立柱图|积水类问题

三类问题 求总的积水量求水坑的个数求水坑最深的深度 基本思路 我们需要从列的角度来看第 i i i 列是不是有积水&#xff0c;但我们该如何确定第 i i i 列是否是有积水&#xff1f; 方法是事先维护一个前后缀的最大值&#xff0c; L [ i ] L[i] L[i] 和 R [ i ] R[i] R[…...

vue前端实现导出页面为word(两种方法)

将vue页面导出为word文档&#xff0c;不用写模板&#xff0c;直接导出即可。 第一种方法(简单版) 第一步&#xff1a;安装所需依赖 npm install html-docx-js -S npm install file-saver -S第二步&#xff1a;创建容器&#xff0c;页面使用方法&#xff08;简单版&#xff1…...

22. Three.js案例-创建旋转的圆环面

22. Three.js案例-创建旋转的圆环面 实现效果 知识点 WebGLRenderer (WebGL渲染器) THREE.WebGLRenderer 是Three.js中最常用的渲染器&#xff0c;用于将场景渲染到WebGL画布上。 构造器 new THREE.WebGLRenderer(parameters) 参数类型描述parametersObject可选参数对象&…...

Elasticsearch:使用阿里 infererence API 及 semantic text 进行向量搜索

在之前的文章 “Elasticsearch 开放推理 API 新增阿里云 AI 搜索支持”&#xff0c;它详细描述了如何使用 Elastic inference API 来针对阿里的密集向量模型&#xff0c;稀疏向量模型&#xff0c; 重新排名及 completion 进行展示。在那篇文章里&#xff0c;它使用了很多的英文…...

Linux WEB服务器的部署及优化

1.用户常用关于web的信息 1.1.什么是www www是world wide web的缩写&#xff0c;及万维网&#xff0c;也就是全球信息广播的意思。 通常说的上网就是使用www来查询用户所需要的信息。 www可以结合文字、图形、影像以及声音等多媒体&#xff0c;超链接的方式将信息以Internet…...

人工智能大模型LLM开源资源汇总(持续更新)

说明 目前是大范围整理阶段&#xff0c;所以存在大量机翻说明&#xff0c;后续会逐渐补充和完善资料&#xff0c;减少机翻并增加说明。 Github上的汇总资源&#xff08;大部分英文&#xff09; awesome-production-machine-learning 此存储库包含一系列精选的优秀开源库&am…...

目标跟踪算法:SORT、卡尔曼滤波、匈牙利算法

目录 1 目标检测 2 卡尔曼滤波 3《从放弃到精通&#xff01;卡尔曼滤波从理论到实践》视频简单学习笔记 3.1 入门 3.2 进阶 3.2.1 状态空间表达式 3.2.2 高斯分布 3.3 放弃 3.4 精通 4 匈牙利算法 5 《【运筹学】-指派问题&#xff08;匈牙利算法&#xff09;》视…...

Java版-图论-拓扑排序与有向无环图

拓扑排序 拓扑排序说明 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列…...

GTC2024 回顾 | 优阅达携手 HubSpot 亮相上海,赋能企业数字营销与全球业务增长

从初创企业入门到成长型企业拓展&#xff0c;再到 AI 驱动智能化运营&#xff0c;HubSpot 为企业的每步成长提供了全方位支持。 2024 年 11 月下旬&#xff0c;备受瞩目的 GTC2024 全球流量大会&#xff08;上海&#xff09;成功举办。本次大会汇聚了全国内多家跨境出海领域企业…...

搜极星破局:拆解企业 “看不见、控不住、比不过” 困局

引言&#xff1a;AI 时代&#xff0c;企业陷入三重信息绝境2026 年&#xff0c;生成式 AI 全面主导用户决策链路&#xff0c;品牌竞争从搜索排名转向 AI 认知权重。但多数企业正深陷看不见、控不住、比不过的三重困局&#xff1a;看不见自身在 AI 平台的真实曝光状态&#xff0…...

开源物联网平台SiteWhere:架构解析与实战部署指南

1. 项目概述&#xff1a;一个开源的物联网应用平台如果你正在寻找一个能够快速搭建、灵活扩展&#xff0c;并且能统一管理成千上万台设备的物联网平台&#xff0c;那么你很可能已经听说过或者正在评估 SiteWhere。作为一个在物联网领域摸爬滚打了多年的从业者&#xff0c;我见过…...

从“Hello There!”徽章看低功耗Mesh网络在嵌入式社交硬件的实现

1. 项目概述&#xff1a;当硬件徽章成为社交网络的物理层如果你参加过大型的技术会议&#xff0c;尤其是像嵌入式系统大会&#xff08;ESC&#xff09;这样的场合&#xff0c;你肯定对那种既兴奋又略带尴尬的社交氛围不陌生。满屋子都是聪明绝顶的工程师&#xff0c;大家脑子里…...

规划求解(Solver)实战:利用Excel的Solver工具进行投资组合优化

投资界有句老话:"别把鸡蛋放在一个篮子里。"但很少有人告诉你后半句:“每个篮子放多少鸡蛋,才是大学问。“Solver就是投资组合的"营养师”,帮你配出最佳"营养比例”。就像投资界的红绿灯,约束条件告诉你什么可以做,什么不可以碰。 一、什么是规划求解…...

AI自主报告正常胸片:技术原理、临床价值与英国NHS实践挑战

1. 项目概述&#xff1a;当AI开始“读”胸片作为一名在医学影像和人工智能交叉领域摸爬滚打了十多年的从业者&#xff0c;我亲眼见证了AI从实验室里的新奇玩具&#xff0c;逐渐成长为临床医生案头一个值得信赖的“第二双眼睛”。最近&#xff0c;一个特别的应用场景正在全球范围…...

如何高效解密华为光猫配置文件:终极操作指南

如何高效解密华为光猫配置文件&#xff1a;终极操作指南 【免费下载链接】HuaWei-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/hu/HuaWei-Optical-Network-Terminal-Decoder 还在为无法读取华为光猫加密配置文件而烦恼吗&#xff1f;网…...

oh-my-prompt:模块化终端提示符引擎的设计、配置与性能优化

1. 项目概述&#xff1a;一个为现代终端量身定制的提示符引擎如果你和我一样&#xff0c;每天有超过一半的工作时间是在终端&#xff08;Terminal&#xff09;里度过的&#xff0c;那么一个高效、美观且信息丰富的命令行提示符&#xff08;Prompt&#xff09;绝对能让你事半功倍…...

ANSYS Workbench网格进阶:巧用‘Face Meshing’与‘Sweep’扫掠,让你的轴承座仿真既快又准

ANSYS Workbench网格进阶&#xff1a;巧用‘Face Meshing’与‘Sweep’扫掠提升轴承座仿真效率 轴承座作为机械传动系统中的关键部件&#xff0c;其应力分布与变形分析的准确性直接影响设备可靠性评估。传统四面体网格虽能快速生成&#xff0c;但在应力集中区域往往需要极高密度…...

容器技术从入门到精通:Docker核心概念、Dockerfile与生产实践全解析

1. 项目概述&#xff1a;从零到一构建容器化认知体系最近在技术社区里&#xff0c;经常看到有朋友在讨论stephrobert/containers-training这个仓库。乍一看&#xff0c;这像是一个个人或团队维护的关于容器技术的培训材料。对于刚接触 Docker 和容器生态的开发者、运维工程师&a…...

工业物联网长距离蓝牙环境监测方案解析

1. 项目概述在工业物联网和远程环境监测领域&#xff0c;如何实现低功耗、长距离的数据传输一直是个技术难点。传统蓝牙技术受限于通信距离&#xff08;通常10米以内&#xff09;&#xff0c;而Wi-Fi方案又面临功耗过高的问题。最近我在一个工厂环境监测项目中&#xff0c;成功…...