MyBatis 中 9 种动态 SQL 标签

MyBatis 提供了以下 9 种动态 SQL 标签,它们用于在 XML 映射文件中编写动态 SQL 语句:

  1. <trim>:通过修剪 SQL 语句的开头和结尾来动态生成 SQL 片段。它可以用于去除不必要的 SQL 关键字或条件语句,并提供了一些属性来定义修剪规则。

  2. <where>:用于在生成的 SQL 语句中添加 WHERE 子句。它可以自动处理条件语句的前缀,并在有条件语句存在时添加 WHERE 关键字。

  3. <set>:用于在生成的 SQL 语句中添加 SET 子句。它主要用于更新操作,可以根据条件来动态生成需要更新的列。

  4. <foreach>:用于在生成的 SQL 语句中进行循环操作。它可以遍历集合或数组,并根据指定的模板将集合元素或数组元素插入到 SQL 语句中。

  5. <if>:用于在生成的 SQL 语句中添加条件判断。可以根据指定的条件决定是否包含某个 SQL 语句片段。

  6. <choose>:类似于 Java 中的 switch 语句,根据条件选择执行不同的 SQL 语句片段。它可以包含多个 <when> 和一个可选的 <otherwise> 标签。

  7. <when>:用于在 <choose> 标签中定义条件分支。可以根据指定的条件判断是否执行特定的 SQL 语句片段。

  8. <otherwise>:在 <choose> 标签中可选的标签,用于定义当没有任何 <when> 条件匹配时执行的 SQL 语句片段。

  9. <bind>:用于将表达式的结果绑定到一个变量上。可以在 SQL 语句中使用这个变量,避免重复计算表达式。

这些动态 SQL 标签在 MyBatis 中提供了灵活的查询和更新操作的能力,可以根据不同的条件动态生成 SQL 语句,使 SQL 映射文件更具可读性和可维护性。

在 MyBatis 中使用这些动态 SQL 标签的方法如下:

  1. <trim> 标签示例:

    <trim prefix="WHERE" prefixOverrides="AND |OR ">
      ...
    </trim>
    ```
    这个示例中,`<trim>` 标签用于修剪生成的 SQL 片段的开头和结尾。`prefix` 属性定义了修剪后添加的前缀,`prefixOverrides` 属性定义了要移除的前缀。
    
    
  2. <where> 标签示例:

    <select id="getUserList" resultType="User">
      SELECT * FROM users
      <where>
        <if test="name != null">
          AND name = #{name}
        </if>
        <if test="age != null">
          AND age = #{age}
        </if>
      </where>
    </select>
    ```
    在这个示例中,`<where>` 标签用于在生成的 SQL 语句中添加 WHERE 子句。`<if>` 标签用于根据条件判断是否包含特定的 SQL 语句片段。
    
    
  3. <set> 标签示例:

    <update id="updateUser" parameterType="User">
      UPDATE users
      <set>
        <if test="name != null">
          name = #{name},
        </if>
        <if test="age != null">
          age = #{age},
        </if>
      </set>
      WHERE id = #{id}
    </update>
    ```
    在这个示例中,`<set>` 标签用于在生成的 SQL 语句中添加 SET 子句。`<if>` 标签用于根据条件判断是否包含特定的更新语句片段。
    
    
  4. <foreach> 标签示例:

    <select id="getUserByIdList" resultType="User">
      SELECT * FROM users
      WHERE id IN
      <foreach collection="idList" item="id" open="(" separator="," close=")">
        #{id}
      </foreach>
    </select>
    ```
    这个示例中,`<foreach>` 标签用于在生成的 SQL 语句中进行循环操作。`collection` 属性指定了要遍历的集合或数组,`item` 属性指定了集合元素或数组元素的变量名。
    
    
  5. <if> 标签示例:

    <select id="getUserByNameAndAge" resultType="User">
      SELECT * FROM users
      WHERE 1=1
      <if test="name != null">
        AND name = #{name}
      </if>
      <if test="age != null">
        AND age = #{age}
      </if>
    </select>
    ```
    在这个示例中,`<if>` 标签用于根据条件判断是否包含特定的 SQL 语句片段。
    
    
  6. <choose><when><otherwise> 标签示例:

    <select id="getUserByCondition" resultType="User">
      SELECT * FROM users
      <choose>
        <when test="name != null">
          WHERE name = #{name}
        </when>
        <when test="age != null">
          WHERE age = #{age}
        </when>
        <otherwise>
          WHERE 1=1
        </otherwise>
      </choose>
    </select>
    ```
    在这个示例中,`<choose>` 标签类似于 Java 中的 switch 语句,根据条件选择执行不同的 SQL 语句片段。`<when>` 标签用于定义条件分支,`<otherwise>` 标签定义了当没有任何条件匹配时执行的 SQL 语句片段。
    
    
  7. <bind> 标签示例:

    <select id="getUserByAgeRange" resultType="User">
      <bind name="minAge" value="20"/>
      <bind name="maxAge" value="30"/>
      SELECT * FROM users
      WHERE age >= #{minAge}
      AND age <= #{maxAge}
    </select>
    ```
    在这个示例中,`<bind>` 标签用于将表达式的结果绑定到一个变量上。在 SQL 语句中可以使用这个变量来避免重复计算表达式。
    
    

以上是对这些动态 SQL 标签在 MyBatis 中的基本使用示例。通过合理地组合和嵌套这些标签,你可以根据需要生成灵活的动态 SQL 语句,以满足不同的查询和更新需求。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值