在Mybatis中写动态sql这些标签:if、where、set、trim、foreach、choose的作用是什么,怎么用?

在 MyBatis 中,您可以使用动态 SQL 标签来构建灵活的 SQL 查询,以根据不同的条件生成不同的查询语句。以下是这些标签的作用和用法:

  1. **`<if>` 标签:** 用于根据某个条件动态地包含或排除 SQL 片段,test:可以写条件。

示例用法:

```xml

<select id="getUserList" parameterType="Map" resultMap="UserResultMap">

SELECT * FROM users

<where>

<if test="username != null">AND username = #{username}</if>

<if test="email != null">AND email = #{email}</if>

</where>

</select>

```

  1. **`<where>` 标签:** 用于在 SQL 查询中生成 `WHERE` 子句,并自动处理不必要的 `AND` 或 `OR`。

示例用法:

```xml

<select id="getUserList" parameterType="Map" resultMap="UserResultMap">

SELECT * FROM users

<where>

<if test="username != null">AND username = #{username}</if>

<if test="email != null">AND email = #{email}</if>

</where>

</select>

```

  1. **`<set>` 标签:** 用于在更新语句中动态生成 `SET` 子句,根据传入的参数来更新特定的列。

示例用法:

```xml

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

```

  1. **`<trim>` 标签:** 用于在 SQL 语句中修剪多余的空白字符和逗号,并可以根据条件自定义修剪的内容。

prefix:在sql动态条件加前缀

suffix:在sql动态条件加后缀

prefixOverrides:删除sql动态条件前缀内容

suffixOverrides:删除sql动态条件后缀内容

示例用法:

```xml

<select id="getUserList" parameterType="Map" resultMap="UserResultMap">

SELECT * FROM users

<where>

<trim prefix="AND" prefixOverrides="OR">

<if test="username != null">OR username = #{username}</if>

<if test="email != null">OR email = #{email}</if>

</trim>

</where>

</select>

```

  1. **`<foreach>` 标签:** 用于循环遍历集合或数组,生成多个 SQL 片段。

示例用法:

```xml

<select id="getUserListByIds" parameterType="List" resultMap="UserResultMap">

SELECT * FROM users

WHERE id IN

<foreach collection="list" item = "listParam" open = "(" separator = "," close = ")">

#{listParam}

</foreach>

</select>

```

  1. **`<choose>` 标签:** 类似于 Java 中的 `switch` 语句,根据条件选择其中一个分支进行处理。

choose(类似switch)

when标签: 类似switch的case分支 , 需要写test属性

otherwise(否则): 类似switch的default分支

示例用法:

```xml

<select id="getUserList" parameterType="Map" resultMap="UserResultMap">

SELECT * FROM users

<where>

<choose>

<when test="username != null">AND username = #{username}</when>

<when test="email != null">AND email = #{email}</when>

<otherwise>AND status = 1</otherwise>

</choose>

</where>

</select>

```

这些动态 SQL 标签允许您在 MyBatis 中根据不同的条件构建动态的查询语句,以实现更灵活的数据库操作。您可以根据具体的业务需求选择适当的标签来创建定制的查询逻辑。

相关推荐
码农阿豪21 分钟前
【金仓数据库征文】Mac开发环境|SpringBoot3 + MyBatisPlus对接KES V9 Docker实战全指南
数据库·macos·docker
杨云龙UP32 分钟前
MySQL 数据库常用备份工具对比:mysqldump、mydumper 与 XtraBackup
linux·运维·服务器·数据库·mysql·dba·备份恢复
ZENERGY-众壹37 分钟前
500个工商业电站压垮数据库?海量光伏时序数据存储的架构取舍
数据库·架构·influxdb·光伏·光伏运维
mubei-1232 小时前
SpringDAO的用法
java·开发语言·数据库
星蓝_starblue4 小时前
零服务器、零数据库!开源growth-board,利用GitHub自动管理刷题/学习/求职全流程
服务器·数据库·程序人生·系统架构·node.js·github·改行学it
三8446 小时前
sqli-labs1-10通关笔记
数据库
BullSmall8 小时前
Another Redis Desktop Manager(ARDM)下载指南
数据库·redis·缓存
SelectDB8 小时前
Apache Doris 倒排索引工作原理:全文检索提速 59 倍,点查提速 14 倍
数据库
码农颜8 小时前
5.1.1 原⼦性
数据库·mysql
机建狂魔8 小时前
Codex 接入第三方模型 API 实战:以 Mimo 为例
java·服务器·数据库·ai·ai编程·codex