MyBatis 中的动态标签可以根据不同的条件生成不同的 SQL 语句,包括以下几种:

  1. 'if' 标签:用于判断某个条件是否成立,如果成立则生成相应的 SQL 语句,否则不生成。示例:
<select id="getUser" parameterType="java.util.Map" resultType="User">
  SELECT * FROM user
  WHERE 1=1
  <if test="id != null">
    AND id = #{id}
  </if>
  <if test="name != null">
    AND name = #{name}
  </if>
</select>
  1. 'choose' 标签:类似于 Java 中的 switch 语句,根据不同的条件生成不同的 SQL 语句,每个条件都对应一个 'when' 标签,如果所有条件都不成立,则生成 'otherwise' 标签中的 SQL 语句。示例:
<select id="getUser" parameterType="java.util.Map" resultType="User">
  SELECT * FROM user
  WHERE 1=1
  <choose>
    <when test="id != null">
      AND id = #{id}
    </when>
    <when test="name != null">
      AND name = #{name}
    </when>
    <otherwise>
      AND age = #{age}
    </otherwise>
  </choose>
</select>
  1. 'where' 标签:用于将多个条件用 AND 连接在一起,如果所有条件都不存在,则 'where' 标签不生成。示例:
<select id="getUser" parameterType="java.util.Map" resultType="User">
  SELECT * FROM user
  <where>
    <if test="id != null">
      AND id = #{id}
    </if>
    <if test="name != null">
      AND name = #{name}
    </if>
  </where>
</select>
  1. 'set' 标签:用于更新操作,将多个更新字段用逗号隔开,同时可以根据条件判断是否更新某个字段。示例:
<update id="updateUser" parameterType="User">
  UPDATE user
  <set>
    <if test="name != null">
      name = #{name},
    </if>
    <if test="age != null">
      age = #{age},
    </if>
  </set>
  WHERE id = #{id}
</update>
  1. 'foreach' 标签:用于循环操作,可以将一个列表中的元素循环遍历,生成多条 SQL 语句。示例:
<select id="getUsersByIds" parameterType="java.util.List" resultType="User">
  SELECT * FROM user
  WHERE id IN
  <foreach collection="list" item="id" separator="," open="(" close=")">
    #{id}
  </foreach>
</select>

原文地址: https://www.cveoy.top/t/topic/oKLl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录