MyBatis 中动态 SQL 标签

在 MyBatis 中,动态 SQL 是构建灵活且高效的 SQL 语句的重要工具。通过使用动态 SQL 标签,开发者可以根据不同的条件动态生成 SQL 语句的各个部分,从而避免手动拼接字符串带来的复杂性和潜在的错误。MyBatis 提供了一系列动态 SQL 标签,下面将详细介绍这些标签及其相关语法。


1. <if> 标签

用途

根据条件判断是否包含某部分 SQL 片段。

属性

  • test:一个 OGNL 表达式,用于判断是否包含该部分 SQL。

语法示例

<select id="selectUsers" parameterType="map" resultType="com.example.User">
    SELECT id, username, email
    FROM users
    WHERE 1=1
    <if test="username != null">
        AND username = #{username}
    </if>
    <if test="email != null">
        AND email = #{email}
    </if>
</select>

解释

  • usernameemail 参数不为 null 时,相应的条件将被包含在 SQL 语句中。
  • 1=1 是一个常用的技巧,用于简化后续条件的拼接,避免首个条件前需要特殊处理。

2. <choose>, <when>, <otherwise> 标签

用途

类似于 Java 的 switch 语句,根据多个条件选择其中一个执行。

属性

  • <choose>:包含多个 <when> 和一个 <otherwise> 标签。
  • <when>:定义具体的条件,包含 test 属性。
  • <otherwise>:定义默认的 SQL 片段,当所有 <when> 条件都不满足时执行。

语法示例

<select id="selectUsersByCondition" parameterType="map" resultType="com.example.User">
    SELECT id, username, email
    FROM users
    WHERE
    <choose>
        <when test="username != null">
            username = #{username}
        </when>
        <when test="email != null">
            email = #{email}
        </when>
        <otherwise>
            1=1
        </otherwise>
    </choose>
</select>

解释

  • 如果 username 不为 null,则按 username 查询。
  • 否则,如果 email 不为 null,则按 email 查询。
  • 如果以上条件都不满足,则返回所有记录(1=1)。

3. <trim> 标签

用途

用于动态添加或删除 SQL 片段的前缀、后缀及指定的前缀/后缀。

属性

  • prefix:添加到修剪后的 SQL 片段前。
  • prefixOverrides:要去除的前缀(如 ANDOR)。
  • suffix:添加到修剪后的 SQL 片段后。
  • suffixOverrides:要去除的后缀。

语法示例

<select id="selectUsersWithTrim" parameterType="map" resultType="com.example.User">
    SELECT id, username, email
    FROM users
    <trim prefix="WHERE" prefixOverrides="AND |OR ">
        <if test="username != null">
            AND username = #{username}
        </if>
        <if test="email != null">
            OR email = #{email}
        </if>
    </trim>
</select>

解释

  • 自动添加 WHERE 关键字。
  • 去除多余的 AND OR 前缀,确保生成的 SQL 语句语法正确。

4. <where> 标签

用途

自动添加 WHERE 关键字,并去除多余的 ANDOR

属性

  • 无需特定属性,通常结合 <if> 标签使用。

语法示例

<select id="selectUsersWithWhere" parameterType="map" resultType="
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YiHanXii

呜呜呜我想喝奶茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值