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

Mybatis实用教程之XML实现动态sql

系列文章目录

1、mybatis简介及数据库连接池
2、mybatis中selectOne的使用
3、mybatis简单使用
4、mybatis中resultMap结果集的使用


Mybatis实用教程之XML实现动态sql

  • 系列文章目录
  • 前言
  • 1. 动态条件查询
  • 2. 动态更新语句
  • 3. 动态插入语句
  • 4、其他标签的使用


前言


当编写 MyBatis 中复杂动态 SQL 语句时,使用 XML 格式是一种非常灵活的方式。这样做可以根据不同条件动态生成 SQL 查询,更新或删除语句。以下是一篇简要的教程,详细介绍如何使用 MyBatis XML 来编写动态 SQL。

1. 动态条件查询

假设有一个 User 实体,有 idusernameemail 字段,我们希望根据不同条件查询用户信息。

<!-- 在 Mapper XML 文件中编写动态 SQL 查询 -->
<select id="selectUsers" resultType="User">SELECT * FROM users<where><if test="id != null">AND id = #{id}</if><if test="username != null and username != ''">AND username = #{username}</if><if test="email != null and email != ''">AND email = #{email}</if></where>
</select>
  • <where> 标签用于将动态生成的条件组合到 WHERE 子句中。
  • <if> 标签根据条件的存在与否来动态生成查询条件。

上面的方法可以根据id、username、email进行条件查询,当test后面的语句为true的时候,会将if标签内的语句拼接。

2. 动态更新语句

假设我们想根据不同的条件更新用户信息。

<!-- 在 Mapper XML 文件中编写动态 SQL 更新 -->
<update id="updateUser" parameterType="User">UPDATE users<set><if test="username != null">username = #{username},</if><if test="email != null">email = #{email},</if></set>WHERE id = #{id}
</update>
  • <set> 标签用于指定要更新的字段。
  • <if> 标签根据条件动态设置要更新的字段。

3. 动态插入语句

如果要根据不同情况插入不同的字段,也可以使用动态 SQL。

<!-- 在 Mapper XML 文件中编写动态 SQL 插入 -->
<insert id="insertUser" parameterType="User">INSERT INTO users<trim prefix="(" suffix=")" suffixOverrides=","><if test="id != null">id,</if><if test="username != null and username != ''">username,</if><if test="email != null and email != ''">email,</if></trim><trim prefix="VALUES (" suffix=")" suffixOverrides=","><if test="id != null">#{id},</if><if test="username != null and username != ''">#{username},</if><if test="email != null and email != ''">#{email},</if></trim>
</insert>
  • <trim> 标签用于动态设置插入的字段和对应的值,当trim标签内的内容为空时,不会添加前缀。
  • prefixsuffix 属性用于指定插入语句的前缀和后缀。
  • suffixOverrides 属性用于去除最后一个不必要的逗号。

4、其他标签的使用

基础的语法使用如下所示。choose、when、otherwise 有点像if-else if -else的感觉

<!-- 使用 choose、when、otherwise 标签实现条件选择 -->
<select id="getUserByIdOrUsername" resultType="User">SELECT * FROM users<where><choose><when test="id != null">AND id = #{id}</when><when test="username != null and username != ''">AND username = #{username}</when><otherwise>AND 1=1</otherwise></choose></where>
</select><!-- 使用 foreach 标签进行遍历操作 -->
<select id="getUsersByIdList" resultType="User">SELECT * FROM usersWHERE id IN<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach>
</select>

相关文章:

Mybatis实用教程之XML实现动态sql

系列文章目录 1、mybatis简介及数据库连接池 2、mybatis中selectOne的使用 3、mybatis简单使用 4、mybatis中resultMap结果集的使用 Mybatis实用教程之XML实现动态sql 系列文章目录前言1. 动态条件查询2. 动态更新语句3. 动态插入语句4、其他标签的使用 前言 当编写 MyBatis 中…...

混合App开发实现页面跳转(更新中)

util.js /*** 这个函数被用来获取 URL 中的查询参数&#xff0c;并将它们以对象&#xff08;键值对&#xff09;的形式返回* param {string} url* returns {object} oParams*/ export function getUrlQuery(url null) {let sUrl url || window.location.href;let oParams {…...

【FPGA】Verilog:BCD 加法器的实现

0x00 XOR 运算在 2 的补码加减法中的应用 2 的补码加减法的特点是&#xff0c;当从某个数中减去负数时&#xff0c;将其转换为正数的加法来计算&#xff0c;并将减去正数的情况转换为负数的加法来计算&#xff0c;从而将所有减法运算转换为加法运算。在这种情况下&#xff0c;…...

机器学习第15天:GBDT模型

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 ​​ 文章目录 GBDT模型介绍 Boosting 残差 GBDT的缺点 python代码实现 代码 模型参数解释 结语 GBDT模型介绍 GBDT&#xff08;Gradient Boos…...

STM32F407-14.3.9-01输出比较模式

输出比较模式 此功能用于控制输出波形&#xff0c;或指示已经过某一时间段。 当捕获/比较寄存器与计数器之间相匹配时&#xff0c;输出比较功能&#xff1a; ● 将为相应的输出引脚分配一个可编程值&#xff0c;该值由输出比较模式&#xff08;TIMx_CCMRx 寄存器中的 OCxM⑦…...

LeetCode题:174. 地下城游戏

目录 一、题目要求 二、解题思路 &#xff08;1&#xff09;状态表示 &#xff08;2&#xff09;状态转移方程 &#xff08;3&#xff09;初始化dp表 &#xff08;4&#xff09;填表顺序 &#xff08;5&#xff09;返回值 三、代码 一、题目要求 174. 地下城游戏 恶魔们…...

CSS、JS文件无法正确加载至页面问题与解决

目录 1. 问题出现 2. 分析与解决 3. 总结 1. 问题出现 自己在写项目是时候&#xff0c;想启动浏览器查询首页面index.jsp的显示效果 预期效果应该是下面这样的&#xff1a; 但是实际上是这样的&#xff1a; 意思也就是说可能是关于CSS、JS相关的引入方面出了问题&#xff…...

ftp的服务安装配置

安装 yum install -y vsftpd # 是否安装成功 rpm -qa | grep vsftpd # 是否开机启动 systemctl list-unit-files | grep vsftpd # 开机启动 systemctl enable vsftpd.service # ftp端口 netstat -antup | grep ftp # 状态 service vsftpd status service vsftpd start service…...

原码,补码,反码(极简版)

原码补码反码 都有符号位&#xff0c;0表示正数&#xff0c;1表示负数 正数 正数的原码&#xff0c;补码&#xff0c;反码都相同 负数 负数的原码&#xff0c;最高位是1&#xff0c;其余的用正常二进制表示 负数的反码&#xff0c;对原码进行符号位不变&#xff0c;其余位…...

uniapp监听wifi连接状态

在uniapp中检测WiFi连接状态可以使用uni的API进行操作。 uni.onNetworkStatusChange((res) > { console.log(res)uni.getConnectedWifi({success: function(res) {console.log(已连接WIFI, res);},fail: function(err) {console.log(未连接WIFI, err);}}); }) 此函数将返回…...

2023年总结和2024年展望(以ue为主攻)

2023年就要过去了&#xff0c;总结下&#xff1a; 先说好的地方 1&#xff0c;pbr材质集成到了osg中&#xff0c;加上直接光和间接光。终于知道pbr咋回事了。光线追踪的视频也跟着敲了一个。 2&#xff0c;得到了认可。拿到了半年奖&#xff0c;leader让我明年和架构师一起进行…...

南京大学计算机学院面试准备

该内容是我面试南京大学计算机学院保研的时候的准备题目&#xff0c;最后是面试的时候问到的问题。 目录 1. 自我介绍2. 进程和线程的区别3. 循环引用4. 操作系统怎么利用多核&#xff1f;5. 英文介绍二叉搜索树6. 英文介绍二叉搜索树的时间复杂度7. 介绍 stackover flow8. 什…...

API成批分配漏洞介绍与解决方案

一、API成批分配漏洞介绍 批量分配&#xff1a;在API的业务对象或数据结构中&#xff0c;通常存在多个属性&#xff0c;攻击者通过篡改属性值的方式&#xff0c;达到攻击目的。比如通过设置user.is_admin和user.is_manager的值提升用户权限等级&#xff1b;假设某API的默认接口…...

跨网文件摆渡系统:安全、可控的数字传输桥梁

在企业高度信息化的时代&#xff0c;数据的流通与共享已经成为企业、组织乃至个人之间不可或缺的沟通方式。然而&#xff0c;在数据流通的过程中&#xff0c;我们经常会遇到各种难题和挑战&#xff0c;尤其是当涉及到不同网络环境之间的文件传输。这不仅需要保证文件的安全性&a…...

线程池的原理和基本使用~

线程池的基本原理&#xff1a; 无论是之前在JavaSE基础中&#xff0c;我们学习过的常量池&#xff0c;还是在操作数据库时&#xff0c;我们学习过数据库连接池&#xff0c;以及接下来要学习的线程池&#xff0c;均是一种池化思想&#xff0c;其目的就是为了提高资源的利用率&a…...

PyTorch2.0环境搭建

一、安装python并配置环境变量 1、打开python官网&#xff0c;下载并安装 Welcome to Python.org 下载 寻找版本&#xff1a;推荐使用3.9版本&#xff0c;或其他表中显示为安全&#xff08;security&#xff09;的版本 安装&#xff1a;&#xff08;略&#xff09; 2、配置环…...

figma 基础使用 —— 常用方法

一、 导入组件 分成两种方式 &#xff08;1&#xff09;离线的包导入&#xff08;iOS 常用组件.fig 直接拖拽到figma最近网页&#xff09; &#xff08;2&#xff09;在插件市场下载https://www.figma.com/community 二、figma中使用标尺 快捷键&#xff1a;shift R 三、插件…...

linux rsync 和scp区别

rsync 和 scp 都是 Linux 中用于文件复制的命令&#xff0c;但它们之间存在一些关键差异&#xff1a; 效率&#xff1a;rsync 在复制文件时&#xff0c;只会复制文件中改变的部分&#xff0c;而 scp 则会复制整个文件&#xff0c;即使文件只有一小部分发生了变化。因此&#xf…...

mac如何永久设置环境变量

1. 先将默认shell修改为bash mac修改默认shell为bash-CSDN博客 2. 修改环境变量 Mac中的环境变量介绍 Mac系统的环境变量&#xff0c;加载顺序为&#xff1a; /etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc 当然/etc/profile和/etc/paths…...

小程序一键生成工具哪个好?

在这个数字化时代&#xff0c;小程序已经成为商家吸引客户、提升业务的重要工具。但是&#xff0c;传统的小程序开发方式既费时又费力&#xff0c;让许多商家望而却步。 现在&#xff0c;有了乔拓云小程序模板开发平台&#xff0c;一切都变了。 乔拓云提供了大量精心设计的模板…...

Ubuntu环境下使用nginx实现强制下载静态资源

安装Nginx sudo apt update sudo apt install nginx关闭防火墙 sudo ufw allow Nginx HTTP修改nginx配置 cd /etc/nginx/conf.d vi nginx.conf在http配置中添加(/your path/为需要下载的文件路径) server {listen 80;server_name localhost;location / {root /your path/…...

苹果 macOS 14.1.2 正式发布 更新了哪些内容?

苹果今日向 Mac 电脑用户推送了 macOS 14.1.2 更新&#xff08;内部版本号&#xff1a;23B92 | 23B2091&#xff09;&#xff0c;本次更新距离上次发布隔了 28 天。 需要注意的是&#xff0c;因苹果各区域节点服务器配置缓存问题&#xff0c;可能有些地方探测到升级更新的时间略…...

【网络编程】-- 02 端口、通信协议

网络编程 3 端口 端口表示计算机上的一个程序的进程 不同的进程有不同的端口号&#xff01;用来区分不同的软件进程 被规定总共0~65535 TCP,UDP&#xff1a;65535 * 2 在同一协议下&#xff0c;端口号不可以冲突占用 端口分类&#xff1a; 公有端口&#xff1a;0~1023 HT…...

数字发射链路噪声系数核算方法、实例与matlab程序

前言 发射链路各器件噪声性能较差会影响发射信号信噪比&#xff0c;从而导致较高的误码率&#xff0c;通过定量的分析发射链路噪声系数与信噪比恶化的关系&#xff0c;能够在设计过程中进行合理的评估和处理。 一、发射链路噪声 发射链路的噪声从特性上可以大致分为&#xff1…...

SQL数据库知识点总结归纳

前后顺序可以任意颠倒,不影响库中的数据关系 关系数据库的逻辑性强而物理性弱,因此关系数据库中的各条记录前后顺序可以任意颠倒,不影响库中的数据关系 一名员工可以使用多台计算机(1:m),而一台计算机只能被一名员工使用(1:1),所以员工和计算机两个实体之间是一对多…...

Linux C语言 39-进程间通信IPC之管道

Linux C语言 39-进程间通信IPC之管道 本节关键字&#xff1a;C语言 进程间通信 管道 FIFO 相关库函数&#xff1a;pipe、mkfifo、mknod、write、read 什么是管道&#xff1f; 管道通常指“无名管道”&#xff0c;是Unix系统中最古老的IPC通信方式。 管道的分类 管道&#…...

python pandas dataframe常用数据处理总结

最近一直在做数据处理相关的工作&#xff0c;有几点经常遇到的情况总结如下&#xff1a; 数据中存在为空数据如何处理 处理方式1&#xff1a;丢弃数据行 # 实现方式1 data data.dropna(subset[id]) # 若id列中某行数值为空&#xff0c;丢弃整行数据 # 实现方式2 data df[df…...

excel做预测的方法集合

一. LINEST函数 首先&#xff0c;一元线性回归的方程&#xff1a; y a bx 相应的&#xff0c;多元线性回归方程式&#xff1a; y a b1x1 b2x2 … bnxn 这里&#xff1a; y - 因变量即预测值x - 自变量a - 截距b - 斜率 LINEST的可以返回回归方程的 截距(a) 和 斜…...

12月8日作业

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数&#xff1b;将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断u界面上输入的账号是否为"admin"&#xff0c;…...

RefCell 数据类型

内部可变性&#xff08;interior mutability&#xff09;是RUST的设计模式之一&#xff0c;它允许你在只持有不可变引用的前提下对数据进行修改。为了能改变数据&#xff0c;内部可变性模式在它的数据结构中使用了unsafe&#xff08;不安全&#xff09;代码来绕过RUST正常的可变…...

[oeasy]python0002_终端_CLI_GUI_编程环境_游戏_真实_元宇宙

回忆 上次 了解了 python 语言的特点 历史悠久功能强大深受好评已成趋势 3大主流操作系统 macwindowslinux 我们 选择 linux 作为基础系统 为什么选择 黑乎乎的命令行界面呢&#xff1f;&#x1f914; GUI vs CLI 个人电脑 用图标和菜单组成 图形界面(GUI) Graphic User I…...

微服务1 springcloud学习笔记P1-P40

b微服务技术栈_哔哩哔哩_bilibili 文档资料: 链接&#xff1a;https://pan.baidu.com/s/1P_Ag1BYiPaF52EI19A0YRw?pwdd03r 提取码&#xff1a;d03r 一 了解微服务技术 二 Eureka (1) Eureka配置 (2) 注册user-service (3) 总结 Ribbon 负载均衡 (1) 流程 三 nacos配置管理…...

【页面】表格展示

展示 Dom <template><div class"srch-result-container"><!--左侧--><div class"left"><div v-for"(item,index) in muneList" :key"index" :class"(muneIndexitem.mm)?active:"click"pa…...

天池SQL训练营(六)-综合练习题-10道经典题目

如果你还没有学习过SQL训练营的以下知识&#xff0c;请查阅主页博文学习&#xff1a; Task 1 SQL基础&#xff1a;初识数据库与SQL-安装与基本介绍等 Task 2 SQL基础&#xff1a;查询与排序-select、运算符、聚合分组查询等 Task 3 SQL进阶&#xff1a;复杂查询方法-视图、子查…...

某校园报名sign解密

某校园报名sign解密 定位 看了下确实是md5标准算法&#xff0c;接下来就看下加密的明文了 最后分开看了下&#xff0c; sign md5(用户名 活动id 10位时间戳 keys)...

2024年安防视频监控行业将面临4大机遇和挑战

当前安防监控市场处于快速发展的阶段&#xff0c;市场不仅有传统的视频监控、门禁系统等单一功能的设备&#xff0c;还涌现出了一系列集成多种安防功能的综合系统。随着人工智能技术的发展&#xff0c;安防监控设备不仅可以对场所进行实时监控&#xff0c;还可以通过图像识别、…...

搞懂HashTable, HashMap, ConcurrentHashMap 的区别,看着一篇就足够了!!!

&#x1f6e9;️&#x1f6e9;️&#x1f6e9;️ 今天给大家分享的是 HashTable, HashMap, ConcurrentHashMap之间的区别&#xff0c;也是自己学习过程中的总结。 清风的CSDN博客 &#x1f6e9;️&#x1f6e9;️&#x1f6e9;️希望我的文章能对你有所帮助&#xff0c;有不足的…...

PostgreSQL 技术内幕(十二) CloudberryDB 并行化查询之路

随着数据驱动的应用日益增多&#xff0c;数据查询和分析的量级和时效性要求也在不断提升&#xff0c;对数据库的查询性能提出了更高的要求。为了满足这一需求&#xff0c;数据库引擎不断经历创新&#xff0c;其中并行执行引擎是性能提升的重要手段之一&#xff0c;逐渐成为数据…...

Vue学习计划-Vue2--Vue核心(七)生命周期

抛出问题&#xff1a;一进入页面就开启一个定时器&#xff0c;每隔1秒count就加1&#xff0c;如何实现 示例&#xff1a; <body> <div id"app">{{ n }}<button click"add">执行</button> </div><script>let vm new …...

前端知识笔记(三十四)———HBuilder的下载与使用(详细步骤)

一、HBuilder IDE的下载 HBuilder下载官网地址&#xff1a; 在地址栏中直接输入https://www.dcloud.io 或者直接点击下面的链接 DCloud - HBuilder、HBuilderX、uni-app、uniapp、5、5plus、mui、wap2app、流应用、HTML5、小程序开发、跨平台App、多端框架 进入官网&#x…...

stl容器

大部分容器的size的复杂度如下&#xff1a; std::vector&#xff1a; 时间复杂度为(1). std::deque&#xff1a; 时间复杂度为 O(1). 双端队列 std::list&#xff1a; 时间复杂度为 O(1)&#xff08;C11 及以后的版本&#xff09;。 std::forward_list&#xff1a; 时间复…...

android https 证书过期

有的时候 我们android https 证书过期 &#xff0c;或者使用明文等方式去访问服务器 可能会碰到类似的 问题 &#xff1a; javax.net.ssl.SSLHandshakeException: Chain validation failed java.security.cert.CertPathValidatorException: Response is unreliable: its validi…...

lv11 嵌入式开发 中断控制器14

目录 1 中断控制器 ​编辑 2 Exynos4412下的中断控制器 2.1 概述 2.2 特征 ​编辑 2.3 中断状态 2.4 中断类型 2.5 中断控制器GIC中断表 3 中断控制器寄存器详解 3.1 ICDDCR&#xff08;Interrupt Controller Distributor Control Register&#xff09; 3.2 ICDISER…...

IDEA 出现问题:Idea-操作多次commit,如何合并为一个并push解决方案

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…...

贝蒂的捣蛋小游戏~(C语言)

引言&#xff1a; 前面贝蒂已经给大家介绍了选择&#xff0c;循环结构~&#xff0c;今天贝蒂就基于这两种结构&#xff0c;为大家讲解一种捣蛋小游戏的设计思路和方法哦。 1.游戏要求 游戏要求&#xff1a; 1. 电脑⾃动⽣成1~100的随机数 2. 玩家猜数字&#xff0c;猜数字的过…...

c# 判断是否连接公网

有一个需求&#xff0c;软件需要在连接公网的状态下才能使用&#xff0c;否则弹出提示 我们判断一下网络不通情况 1.系统未开启网络&#xff1a;例如关掉了WIFI&#xff0c;拔掉网线 2.网络已连接无internet&#xff1a;连接了路由器&#xff0c;但路由器未连接外网 对于以上…...

unity 2d 入门 飞翔小鸟 场景延续(八)

1、新建c#脚本如下 代码&#xff0c;在前方生成生成自身图片并3s后销毁自身&#xff0c;在碰撞物体后小鸟死亡后不删除自身 using System.Collections; using System.Collections.Generic; using UnityEngine;public class CopyScene : MonoBehaviour { //要复制的对象public…...

scrapy介绍,并创建第一个项目

一、scrapy简介 scrapy的概念 Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。 Scrapy 使用了Twisted异步网络框架&#xff0c;可以加快我们的下载速度。 Scrapy文档地址&#xff1a;http://scrapy-chs.readthedocs.io/z…...

Rust语言项目实战(九 - 完结) - 胜利与失败

回顾 在前面的章节中,我们已经实现了这个游戏中大部分的模块和功能,我们可以指挥我们的战机左右移动,并发射子弹;我们还创造了一堆的侵略者,从屏幕上方缓缓降落,试图到达屏幕的底部。 本章中,我们将对游戏的输赢作出最后的裁决,到底是我们的保卫者英勇无敌,还是侵略…...

【Linux系统编程】项目自动化构建工具make/Makefile

介绍&#xff1a; make和Makefile是用于编译和构建C/C程序的工具和文件。Makefile是一个文本文件&#xff0c;其中包含了编译和构建程序所需的规则和指令。它告诉make工具如何根据源代码文件生成可执行文件&#xff0c;里面保存的是依赖关系和依赖方法。make是一个命令行工具&a…...