一、问题

在java代码中,基本的判断逻辑分路可以使用if,else if,else;但是如果在Mybatis中是否有对应的逻辑判断分路,来帮助我们在Mybatis的sql里,做逻辑判断?

二、分析

Mybatis中有,下面介绍两种,一是case-when-then-else-end;另一种是choose-then-otherwise,后者形式如下:
(Mybatis只有if标签,没有else标签)

<choose>
    <when>

   </when>
   <otherwise>

  </otherwise>
</choose>

三、举例

例如,

<select>
	select * from s_usr
	<choose>
       <when test= 'role!=null and role !=""  '>
			case  role
			 when instr(role,'super_')>0 then '00' 
			 else '01'
			 end as roles
        </when>
        <otherwise>
           case id
                 when id<'100' then '00'
                  else '01'
            end as roles
       </otherwise>
    </choose>
</select>

四、解析

1、when标签里面的表示满足的条件,这里用的是最基本的非空条件;不为null,补位空字符串;
2、instr(a,b)函数:表示,如果a字符串中包含b字符串,则返回值大于0,否则等于0;
3、case-when-then-else-end;也是一种选择转换方式;如果role字段中的值包含”super_”字符串;则将role状态以“00”管理员的身份展现,否则role存值“01”,表示普通人员,并且以别名roles作为栏目名来展示;
4、choose标签里,不带任何条件,表示里面包裹的部分为选择判断;when用来布置条件;而otherwise用来处理其他情况;第一种情况,如果role字段的值不为空,且不为空字符串,才能到第一个when标签里;然后when标签里还有一个情况判断,那就是case-when-then-else-end;否则,进入otherwise标签里;在otherwise里,id小于100的,也是管理员,值为“00”,否则为“01”;

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐