mybatis动态SQL - if choose when ot

2019-09-26  本文已影响0人  hellokitty小丸子

if

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

<select id="findName" resultType="BaseResultMap">
  SELECT * FROM wechat_qa
  WHERE status = 1
  <if test="name != null">
    AND name like #{name}
  </if>
</select>

这条语句提供了一个可选的文本查找类型的功能。如果没有传入"name",那么所有状态为1的结果都会返回,若传入了"name",那么就会把模糊查找"name"内容的结果返回。
如果想可选地通过"name"和"age"两个条件搜索该怎么办呢?首先,改变语句的名称让它更具实际意义,然后只要加入另一个条件即可:

<select id="findAll" resultType="BaseResultMap">
  SELECT * FROM wechat_qa
  WHERE status = 1
  <if test="name != null">
    AND name like #{name}
  </if>
  <if test="age != null">
    AND age = #{age}
  </if>
</select>

choose, when, otherwise

有些时候,我们不想用到所有的条件语句,而只想从中择其一二。针对这种情况,MyBatis 提供了choose元素,它有点像 Java 中的 switch 语句。
还是上面的例子,但是这次变为提供了"name"就按"name"查找,提供了"age"就按"age"查找,若两者都没有提供,就返回所有符合条件的结果(实际情况可能是由管理员按一定策略选出结果列表,而不是返回大量无意义的随机结果)。

<select id="findAll"  resultType="BaseResultMap">
  SELECT * FROM wechat_qa WHERE status = 1
  <choose>
    <when test="title = null">
      AND title like #{title}
    </when>
    <when test="author != null and author.name != null">
      AND author_name like #{author.name}
    </when>
    <otherwise>
      AND age = 1
    </otherwise>
  </choose>
</select>
上一篇下一篇

猜你喜欢

热点阅读