在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 中根据不同的条件构建动态的查询语句,以实现更灵活的数据库操作。您可以根据具体的业务需求选择适当的标签来创建定制的查询逻辑。

相关推荐
YGGP13 分钟前
【每日八股】Redis篇(二):数据结构
数据结构·数据库·redis
愉悦的麻婆豆腐24 分钟前
Neo4j使用neo4j-admin导入csv数据方法
数据库·neo4j
夜泉_ly3 小时前
MySQL -安装与初识
数据库·mysql
qq_529835354 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New7 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6757 小时前
数据库基础1
数据库
我爱松子鱼7 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo7 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser8 小时前
【SQL】多表查询案例
数据库·sql
Galeoto8 小时前
how to export a table in sqlite, and import into another
数据库·sqlite