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

相关推荐
倔强的石头_7 小时前
《Kingbase护城河》——猎捕慢查询:执行计划的微观解析与索引调优实战
数据库
SelectDB9 小时前
Apache Doris Python UDF:让 SQL 直接调用 Python 生态,支撑 Agent 时代复杂业务逻辑
大数据·数据库·python
Flittly11 小时前
【AgentScope Java新手村系列】(16)从RAG到多路检索
java·spring boot·spring
小兔崽子去哪了11 小时前
Java 生成二维码解决方案
java·后端
人活一口气15 小时前
从JVM调优到MCP协议:Java全栈技术体系深度总结与企业级架构实践
java·spring boot
NE_STOP17 小时前
Vibe Coding -- 完整项目案例实操
java
荣码17 小时前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python
SimonKing17 小时前
Google第三方授权登录
java·后端·程序员
明月光81817 小时前
从一行 @Builder 说起:重新拾起 Java 的 Lombok、注解与 Builder 模式
java
考虑考虑1 天前
Mybatis实现批量插入
java·后端·mybatis