mybatis的 <choose><when><otherwise>标签和<if>标签的区别

首先最重要的一点是when与otherwise标签一定是在choose内部使用的     

其次choose标签是按照顺序判断内部when标签中的test条件判断出是否成立,如果有一个成立,则choose结束

当choose中所有when条件都不满时,则执行otherwise中的sql,类似于java中的switch语句,choose为switch、when为case、otherwise为default。例如下面的例子,同样把所有可以限制的条件都写上。choose会从上到下选择一个when标签的test为true的sql执行。安全考虑,我们使用where标签将choose抱起来,防止[关键字多余]这个错误

<!--  choose(判断参数) - 按顺序将实体类 User 第一个不为空的属性作为:where条件 -->  
<select id="getUserList_choose" resultMap="resultMap_user" parameterType="com.yiibai.pojo.User">  
    SELECT *  
      FROM User u   
    <where>  
        <choose>  
            <when test="username !=null ">  
                u.username LIKE CONCAT(CONCAT('%', #{username, jdbcType=VARCHAR}),'%')  
            </when >  
            <when test="sex != null and sex != '' ">  
                AND u.sex = #{sex, jdbcType=INTEGER}  
            </when >  
            <when test="birthday != null ">  
                AND u.birthday = #{birthday, jdbcType=DATE}  
            </when >  
            <otherwise>  
            </otherwise>  
        </choose>  
    </where>    
</select> 

if 标签不会跳出判断语句,下面有一个容易忘记的点顺便提一下

 使用if标签中的==判断字符串的时候应该写成

<if test='type=="y"'>  
    and status = 0   
</if>  

而不是

<if test="type=='y'">  
    and status = 0   
</if>  

mybatis是使用的OGNL表达式来进行解析的,在OGNL的表达式中,’y’会被解析成字符,因为java是强类型的,char 和 一个string 会导致不等。所以if标签中的sql不会被解析。具体的请参照 OGNL 表达式的语法

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值