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

相关推荐
luck_bor7 分钟前
File类&递归作业
java·开发语言
weixin_397574098 分钟前
用自然语言查数据库出图表靠谱吗?一次智能问数实践复盘
数据库
武子康27 分钟前
Java-07 深入浅出 MyBatis数据库一对多关系模型实战:表结构设计与查询实现
java·后端
字节跳动开源2 小时前
Viking AI 搜索 CLI 正式发布:会说话,就能做搜索推荐
数据库·人工智能·开源
REDcker2 小时前
Linux OverlayFS详解
java·linux·运维
Royzst3 小时前
xml知识点
java·服务器·前端
TechWJ3 小时前
数据库在公司内网,出差路上想查数据怎么办?
服务器·数据库·mariadb
我是一颗柠檬3 小时前
【MySQL全面教学】MySQL事务与ACID Day9(2026年)
数据库·后端·mysql
橙子圆1233 小时前
Redis知识9之集群
数据库·redis·缓存
鱼鳞_3 小时前
苍穹外卖-Day08(缓存套餐)
java·redis·缓存