MyBatis中常见标签的使用(动态SQL)

MyBatis 中的动态 SQL 允许你在 XML 映射文件中编写灵活的 SQL 查询语句,根据不同的条件动态生成不同的 SQL 语句。这样可以避免在 Java 代码中拼接 SQL 字符串,使得 SQL 查询更加清晰和易维护。本文章将介绍几个常见的标签并实现动态SQL

目录

一.标签

二.标签

三.标签

四.标签

五.标签


一.<if>标签

<if> 标签用于在 SQL 映射文件中根据条件来动态生成 SQL 语句的一部分。这使得我们可以根据不同的情况动态地包含或排除特定的 SQL 片段,示例如下:

    <select id="selectByCondition" resultType="User">SELECT * FROM users<where><if test="username != null">AND username = #{username}</if><if test="email != null">AND email = #{email}</if></where></select>

在<if>标签中,当test语句成立时才会将里面的语句拼接到SQL里面,从而实现动态的效果

二.<trim>标签

<trim> 可以帮助我们处理 SQL 语句中的前缀、后缀或者指定的字符

在标签中可以指定四个属性:

  • prefix 属性定义了在整个 SQL 语句片段前添加的字符串。
  • suffix 属性定义了在整个 SQL 语句片段后添加的字符串。
  • prefixOverrides 属性指定了需要在 SQL 语句片段开头移除的前缀字符串。
  • suffixOverrides 属性指定了需要在 SQL 语句片段末尾移除的后缀字符串。

示例:

    <insert id="insertUserByCondition">INSERT INTO userinfo<trim prefix="(" suffix=")" suffixOverrides=","><if test="username !=null">username,</if><if test="password !=null">`password`,</if><if test="age != null">age,</if><if test="gender != null">gender,</if><if test="phone != null">phone,</if></trim>VALUES<trim prefix="(" suffix=")" suffixOverrides=","><if test="username !=null">#{username},</if><if test="password !=null">#{password},</if><if test="age != null">#{age},</if><if test="gender != null">#{gender},</if><if test="phone != null">#{phone}</if></trim></insert>

在示例中,指定添加了前缀 '(' 和后缀 ')' ,以及将最终SQL中多余的 ',' 去除 

三.<where>标签

<where> 标签通常用于动态生成 SQL 查询语句的 WHERE 子句。它可以帮助我们处理查询条件的拼接,并且根据条件动态生成 WHERE 子句,使得 SQL 查询语句更加灵活和易于维护。

示例:

    <select id="selectByCondition" resultType="User">SELECT * FROM users<where><if test="username != null">AND username = #{username}</if><if test="email != null">AND email = #{email}</if></where></select>

在示例中,如果username和email都为null,则<where>标签将不会生成where关键字,并且会处理多余的AND

四.<set>标签

和<where>标签的功能类似,示例如下:

    <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>

在示例中,如果username和email都为null,则<where>标签将不会生成set关键字,并且会处理多余的 ',' 

五.<foreach>标签

<foreach> 标签是 MyBatis 中用于遍历集合并生成动态 SQL 语句的标签之一。它通常用于在 SQL 语句中动态地拼接 IN 子句的值,可以非常方便地处理批量操作或者根据集合条件进行查询。

在使用时可以指定5个属性:

  • collection:指定要遍历的集合的属性名。
  • item:指定在遍历过程中当前元素的别名。
  • open:指定遍历开始时的字符串,通常用于指定 IN 子句的开头部分。
  • separator:指定每个元素之间的分隔符,通常用于指定 IN 子句中元素的分隔符。
  • close:指定遍历结束时的字符串,通常用于指定 IN 子句的结束部分。

示例如下:

<select id="selectUsersByIdList" resultType="User">SELECT * FROM usersWHERE id IN<foreach collection="idList" item="id" open="(" separator="," close=")">#{id}</foreach>
</select>

五.<include>标签

<include> 标签是 MyBatis 中用于代码重用和模块化的标签,它可以将 SQL 片段抽取出来并在多个地方进行重复使用。这样可以提高 SQL 映射文件的可维护性,并减少重复代码的编写。

示例如下:

<!-- 定义 SQL 片段 -->
<sql id="commonColumns">column1, column2, column3
</sql><!-- 在具体的 SQL 语句中使用 <include> 引用定义的 SQL 片段 -->
<select id="selectUser" resultType="User">SELECT<include refid="commonColumns"/>FROM user_tableWHERE id = #{id}
</select>

<include> 标签的主要属性是 refid,它指定了要引用的 SQL 片段的 id。


到这里关于MyBatis的常见标签的介绍就结束了~

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

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

相关文章

左偏树,可合并堆

合并两个堆并维护最小或最大性质解决树上节点问题&#xff0c;从叶节点往根维护&#xff0c;每个节点看作一个堆表示到最近的叶节点的距离&#xff0c;所以每次对合并&#xff08;树高矮&#xff09;表示堆的顶点对应下标关键代码 static void dfs(int x){for(int ihead[x];i&g…

全域运营是本地生活服务的新模式吗?

最近&#xff0c;本地生活赛道又出现了一个新的说法&#xff0c;即全域运营是本地生活的下半场。事实上&#xff0c;这一论断并非空穴来风&#xff0c;而是有真凭实据。 作为多家互联网大厂重点布局的业务板块&#xff0c;本地生活的火爆程度早已有目共睹。根据多家互联网大厂…

Vue 组件功能的复用

Vue中的混入&#xff08;Mixins&#xff09;是一种复用组件逻辑的技术&#xff0c;它允许你抽取组件中的可复用功能&#xff0c;并将其作为一个独立的模块与其他组件组合。混入对象可以包含数据、计算属性、方法、生命周期钩子、侦听器等组件选项。当组件使用混入时&#xff0c…

互联网的利

在互联网没发明之前&#xff0c;人类说话要近距离的说&#xff0c;玩游戏要近距离的玩&#xff0c;十分麻烦。于是&#xff0c;互联网解决了这个问题。聊天可以在电脑上聊&#xff0c;玩游戏可以用游戏软件查找玩家来玩&#xff0c;实现了时时可聊&#xff0c;时时可玩的生活。…

nginx编译安装手把手教学

编译安装nginx的第一步需要从nginx的官网找到nginx最新的稳定版本 下面这是官方网站的资源下载地址 https://nginx.org/en/download.html选中稳定版本点击右键——选择复制链接 在终端内使用wget指令官网下载地址&#xff0c;将nginx下载 使用wget指令下载 wget https://ng…

代码模板,Cookie和Session

目录 代码模板 Cookie的基本使用 概念 Cookie的API public Cookie(String name, String value) 发送Cookie对象到客户端&#xff1a;使用response对象 创建Cookie对象并响应给浏览器 在服务器后端获取Cookie对象 Cookie[]cookiesrequset.getCookies(); Cookie的使用细…

微服务架构中Java的应用

在微服务架构中&#xff0c;Java是一种非常常用的编程语言。Java生态系统非常庞大&#xff0c;有许多框架和工具可以用来构建和管理微服务。 以下是一些在微服务架构中使用Java编写的应用程序的示例&#xff1a; Spring Boot和Spring Cloud&#xff1a;Spring Boot是一种用于快…

【InternLM实战营第二期笔记】03:“茴香豆“,搭建你的 RAG 智能助理(未完成)

文章目录 笔记-RAG课程结构为什么要用 RAG&#xff1f;定义工作原理向量数据库RAG 工作流程发展历程常见优化RAG vs 微调LLM 优化方法比较RAG的评价总结 笔记-茴香豆什么是茴香豆茴香豆实战 笔记-RAG 课程结构 为什么要用 RAG&#xff1f; 新增知识&#xff0c;尤其是高频变动…

基于51单片机简易温度计

一.硬件方案 本系统利用51单片机控制温度传感器DS18B20进行温度的实时检测并显示&#xff0c;能够实现快速测量环境温度。硬件以微控制器为核心&#xff0c;外接时钟电路、复位电路、温度测量电路、LED显示电路组成。 二.设计功能 &#xff08;1&#xff09;采用DS18B20温度…

Node.js和npm常用命令

一、Node.js简介 Node.js是一个免费、开源、跨平台的JavaScript运行时环境&#xff0c;允许开发人员创建服务器、web应用程序、命令行工具和脚本。 点击查看node.js中文官网 点击查看node.js英文官网 二、npm简介 npm(Node Package Manager)是Node.js的软件包管理器&#xff0…

使用Python编写的SIRD模型示例

代码是一个使用Python编写的SIRD模型示例,模拟传染病在人群中的传播。SIRD模型是一个经典的流行病学模型,它将人群分为四个部分:易感者(S)、感染者(I)、康复者(R)和死亡者(D)。 2. **定义SIRD模型的微分方程**: - `sird_model` 函数定义了SIRD模型的基本方程。它接受当前…

ssm150旅游网站的设计与实现+jsp

旅游网站设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本旅游网站就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞…

如何在Java中实现函数式编程?

在Java中实现函数式编程的关键是使用Lambda表达式和函数式接口。下面是一个简单的示例&#xff0c;展示了如何使用Lambda表达式和函数式接口来实现函数式编程。 首先&#xff0c;定义一个函数式接口&#xff0c;可以通过使用FunctionalInterface注解来标记该接口为函数式接口。…

解析txt文件,并以字段名为key,解析后数据为value,动态参数入库

工具方法 default ArrayList<HashMap<String,String>> txt2MapList(String[] fieldNames,File file){ArrayList<HashMap<String,String>> entityMaps new ArrayList<>();try{BufferedReader br new BufferedReader(new FileReader(file));//…

工作纪实50-Idea下载项目乱码

下载了公司的一份项目代码&#xff0c;发现是gbk格式的&#xff0c;但是我的日常习惯又是utf-8&#xff0c;下载项目以后全是乱码&#xff0c;一脸懵 借用网友的一张图&#xff0c;如果是一个一个文件这么搞&#xff0c;真的是费劲&#xff0c;好几百个文件&#xff01; 步骤…

NSS‘题目练习3

[SWPUCTF 2021 新生赛]easyupload3.0 打开题目发现要求上传.jpg文件 先上传抓包&#xff0c;尝试更改后缀 换一种形式 文件头绕过 都试过之后尝试上传.htaccess文件&#xff0c;发现上传成功 会将之后上传的文件后缀自动更名为.php 再上传.jpg文件 蚁剑连接找到flag [SWPUCTF …

保障餐饮场所安全:可燃气体报警器专业检测的必要性

在餐饮行业&#xff0c;火灾隐患一直是备受关注的问题。为了有效预防和及时发现可燃气体泄漏&#xff0c;可燃气体报警器的专业检测周期显得尤为重要。 今天&#xff0c;佰德和大家一起来深入了解一下可燃气体报警器的专业检测周期&#xff0c;若您对此有不同的观点或其他的问…

K8S集群监控方案之Prometheus+kube-state-metrics+Grafana

序言 | Prometheus 中文文档 方案简单架构图 一、部署kube-state-metrics 1、部署文件下载 地址 kube-state-metrics/examples/standard at main kubernetes/kube-state-metrics GitHub 2、修改下载的文件 2.1、修改镜像 原镜像可能下载不了&#xff0c;这里修改deploy…

苹果与OpenAI合作在即:iOS 18中的ChatGPT引发期待与担忧

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

互联网应用主流框架整合之数据库事务管理

在互联网系统中同时运行着成千上百个线程是十分常见的事情&#xff0c;尤其当一个热门出现时&#xff0c;用户几乎同时打开手机、电脑、平板灯设备进行访问&#xff0c;这样就会导致数据库处在一个多事务访问的环境中&#xff0c;从而引发数据丢失或者数据不一致的现象&#xf…