• if

    if

    动态 SQL 通常要做的事情是根据条件包含 where 子句的一部分。比如:

    1. <select id="findActiveBlogWithTitleLike"
    2. resultType="Blog">
    3. SELECT * FROM BLOG
    4. WHERE state = ‘ACTIVE’
    5. <if test="title != null">
    6. AND title like #{title}
    7. </if>
    8. </select>

    这条语句提供了一种可选的查找文本功能。如果没有传入“title”,那么所有处于“ACTIVE”状态的BLOG都会返回;反之若传入了“title”,那么就会对“title”一列进行模糊查找并返回 BLOG 结果(细心的读者可能会发现,“title”参数值是可以包含一些掩码或通配符的)。

    如果希望通过“title”和“author”两个参数进行可选搜索该怎么办呢?首先,改变语句的名称让它更具实际意义;然后只要加入另一个条件即可。

    <select id="findActiveBlogLike"
         resultType="Blog">
      SELECT * FROM BLOG WHERE state = ‘ACTIVE’
      <if test="title != null">
        AND title like #{title}
      </if>
      <if test="author != null and author.name != null">
        AND author_name like #{author.name}
      </if>
    </select>