Mybaits 动态sql 整理

一 常见的

MyBatis 是一个流行的 Java 数据持久化框架,它提供了灵活的动态 SQL 查询功能,让开发者可以根据需要构建动态的 SQL 查询语句。下面是 MyBatis 中常用的动态 SQL 构建方式:

  1. if 元素:用于根据条件判断是否包含某个 SQL 字段或语句。示例:

```xml

<select id="getUserList" resultType="User">

SELECT * FROM user

WHERE 1 = 1

<if test="userName != null">

AND user_name = #{userName}

</if>

<if test="gender != null">

AND gender = #{gender}

</if>

</select>

```

  1. choose, when, otherwise 元素:用于构建类似于 switch-case 语句的动态 SQL。可以根据条件选择不同的 SQL 语句执行。示例:

```xml

<select id="getUserList" resultType="User">

SELECT * FROM user

WHERE 1 = 1

<choose>

<when test="userName != null">

AND user_name = #{userName}

</when>

<when test="gender != null">

AND gender = #{gender}

</when>

<otherwise>

AND status = 'ACTIVE'

</otherwise>

</choose>

</select>

```

  1. where 元素:用于动态生成 WHERE 子句,并且会自动去除多余的 AND 或 OR。示例:

```xml

<select id="getUserList" resultType="User">

SELECT * FROM user

<where>

<if test="userName != null">

AND user_name = #{userName}

</if>

<if test="gender != null">

AND gender = #{gender}

</if>

</where>

</select>

```

  1. set 元素:用于动态生成 UPDATE 语句中的 SET 子句。示例:

```xml

<update id="updateUser" parameterType="User">

UPDATE user

<set>

<if test="userName != null">

user_name = #{userName},

</if>

<if test="gender != null">

gender = #{gender},

</if>

</set>

WHERE id = #{id}

</update>

```

  1. foreach 元素:用于遍历集合或数组,并将集合或数组的元素动态替换进 SQL 语句中。示例:

```xml

<select id="getUserList" resultType="User">

SELECT * FROM user

WHERE id IN

<foreach item="id" collection="ids" open="(" separator="," close=")">

#{id}

</foreach>

</select>

```

除了上述的元素,MyBatis 还提供了许多其他的动态 SQL 构建方式,如动态拼接 SQL 字符串等。这些方式可以根据实际需求来选择使用,以便构建灵活、可复用的动态 SQL 查询语句。

相关推荐
大头an16 小时前
Spring事务在微服务架构中的实践与挑战
java
xie_pin_an16 小时前
Redis 核心命令速查表
数据库·redis·缓存
喵行星16 小时前
MySQL XtraBackup 使用文档(全量 + 增量备份与恢复)
数据库·mysql·adb
BugShare16 小时前
嘿嘿,一个简单ElasticSearch小实现
java·大数据·spring boot·elasticsearch
小兵张健17 小时前
Java + Spring 到 Python + FastAPI (一)
java·python·spring
Seven9717 小时前
剑指offer-37、数字在升序数组中出现的次数
java
SimonKing17 小时前
还在为HTML转PDF发愁?再介绍两款工具,为你保驾护航!
java·后端·程序员
龙泉寺天下行走17 小时前
[Powershell入门教程]第4天:模块、脚本编写、错误处理与 .NET 集成
java·服务器·前端
aniden17 小时前
Swagger从入门到实战
java·开发语言·spring
泥嚎泥嚎17 小时前
【Android】给App添加启动画面——SplashScreen
android·java