Mybatis -> 动态SQL之choose、when、otherwise

choose when otherwise:相当于swich,when是case,otherwise是default

<select id="setSelect" resultType="Blog">
        select * from blog
        /*where用来去掉可能多出来的and 注释也不能乱写位置,会报错的*/
        <where>
            <choose>
                <when test="author !=null">
                /*choose搭配when使用 与swich差不多 只执行其中一个 otherwise是默认执行*/
                    author=#{author}
                when>
                <when test="title !=null">
                 /*when是顺序执行的,先判断第一个,满足就跳出了,不会判断第二个when的 最后才是默认的other*/
                    and title=#{title}
                when>
                <otherwise>
                    and views=#{views}
                otherwise>
            choose>
        where>
    select>

官方的解释

有时候,我们不想使用所有的条件,而只是想从多个条件中选择一个使用。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。

还是上面的例子,但是策略变为:传入了 “title” 就按 “title” 查找,传入了 “author” 就按 “author” 查找的情形。若两者都没有传入,就返回标记为 featured 的 BLOG(这可能是管理员认为,与其返回大量的无意义随机 Blog,还不如返回一些由管理员精选的 Blog)。

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’
  <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 featured = 1
    otherwise>
  choose>
select>

你可能感兴趣的:(Mybatis,数据库,sql,数据库,database)