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 查询语句。

相关推荐
学到头秃的suhian1 小时前
Maven
java·maven
小坏讲微服务1 小时前
Docker-compose 搭建Maven私服部署
java·spring boot·后端·docker·微服务·容器·maven
chxii1 小时前
Maven 详解(下)
java·maven
inferno1 小时前
Maven基础(二)
java·开发语言·maven
杨武博1 小时前
关于maven中pom依赖冲突问题记录
java·maven
DashVector2 小时前
向量检索服务 DashVector产品计费
数据库·数据仓库·人工智能·算法·向量检索
陈果然DeepVersion3 小时前
Java大厂面试真题:Spring Boot+Kafka+AI智能客服场景全流程解析(十)
java·spring boot·ai·kafka·面试题·向量数据库·rag
KYGALYX3 小时前
在Linux中备份msyql数据库和表的详细操作
linux·运维·数据库
檀越剑指大厂3 小时前
金仓KReplay:定义数据库平滑迁移新标准
数据库
但要及时清醒3 小时前
ArrayList和LinkedList
java·开发语言