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

相关推荐
乐启国际旅行社有限公司2 分钟前
Java线程池实战:文旅系统批量任务性能优化(团期生成/数据导出)
java·开发语言·性能优化
Listen·Rain12 分钟前
用AI开发出一个AI
java·人工智能·spring boot·tomcat·intellij-idea·mybatis·visual studio
AI人工智能+电脑小能手13 分钟前
【大白话说Java面试题 第203题】【09_Zookeeper篇】第4题:ZooKeeper 的节点类型有哪些?
java·zookeeper·分布式锁·分布式协调·znode
sevenll0720 分钟前
SqlKit - 覆盖 50+ 数据库的 AI 智能体 SQL 桌面客户端
数据库·人工智能·sql·智能体
宸津-代码粉碎机22 分钟前
告别手动Jar部署!生产级无损热部署方案,彻底解决OOM与更新失效问题
java·大数据·开发语言·人工智能·python
米码收割机24 分钟前
【移动】线上购物移动端网站(源码+文档)【独一无二】
java·开发语言·前端·python·django
无敌秋39 分钟前
python/c++/java上云
java·c++·python
都叫我大帅哥1 小时前
BCrypt 还是 Argon2?Spring Security 密码加密方案深度解析与实战对比
java·spring
数智化管理手记3 小时前
手工统计指标误差大、效率低?指标管理系统如何告别人工算数痛点?
大数据·运维·数据库·人工智能·云计算
ShiXZ2139 小时前
Redis 常用指令全集:redis-cli 实战速查手册
数据库·redis·缓存