美文网首页
mybatis动态SQL - if choose when ot

mybatis动态SQL - if choose when ot

作者: hellokitty小丸子 | 来源:发表于2019-09-26 11:40 被阅读0次

    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>
    

    相关文章

      网友评论

          本文标题:mybatis动态SQL - if choose when ot

          本文链接:https://www.haomeiwen.com/subject/qhycuctx.html