MyBatis 3允许你使用动态SQL构建灵活的查询语句,以便根据不同条件生成不同的SQL语句。以下是一些常见的动态SQL用法:

1. If元素

使用<if>元素可以根据条件包含或排除部分SQL语句:
<select id="getUser" parameterType="map" resultType="User">
  SELECT * FROM users
  WHERE 1=1
  <if test="id != null">
    AND id = #{id}
  </if>
  <if test="username != null">
    AND username = #{username}
  </if>
</select>

在上面的例子中,<if> 元素用于根据传递的参数来动态生成查询条件。

2. Choose、When、Otherwise元素

<choose>元素类似于Java中的switch语句,它可以包含多个<when>元素和一个可选的<otherwise>元素。根据条件,只有其中一个分支会被包含在SQL语句中:
<select id="getUser" parameterType="map" resultType="User">
  SELECT * FROM users
  <where>
    <choose>
      <when test="id != null">
        AND id = #{id}
      </when>
      <when test="username != null">
        AND username = #{username}
      </when>
      <otherwise>
        AND 1=1
      </otherwise>
    </choose>
  </where>
</select>

3. Trim元素

<trim>元素可以用于处理SQL语句的前缀和后缀。例如,可以使用它来处理WHERE子句的动态拼接:
<select id="getUser" parameterType="map" resultType="User">
  SELECT * FROM users
  <trim prefix="WHERE" prefixOverrides="AND | OR">
    <if test="id != null">
      AND id = #{id}
    </if>
    <if test="username != null">
      AND username = #{username}
    </if>
  </trim>
</select>

在上述例子中,<trim>元素的prefix属性设置了WHERE关键字,而prefixOverrides属性指定了要移除的前缀,以处理动态拼接的问题。

这些只是MyBatis动态SQL的一些基本用法。通过结合<foreach>元素、<set>元素等,你可以构建更加复杂和灵活的SQL语句,以适应不同的查询需求。


转载请注明出处:http://www.pingtaimeng.com/article/detail/7017/MyBatis