Mybatis的<if>和<choose>的区别 以及“=”判断

原创 2016年08月28日 15:48:24


      2016年8月28日 每周一篇博客


       在项目中xml文件经常会遇到在判断等于某个值时加什么条件不等于某个值的时候加什么条件,比如下面这个例子:

      <if  test=" name != null">
            AND T.NAME = #{NAME,jdbcType=VARCHAR}
     </if>
    <if  test=" name  == null">
           ORDER BY NAME,ID
    </if>

   

      正确很好的写法需要引入<choose>标签

 <choose>
       <when test=" name != null">
          AND T.NAME = #{NAME,jdbcType=VARCHAR}
      </when>
     <otherwise>
        ORDER BY T.PRODUCT_TYPE_CODE, T.SORT DESC, T.CREATE_TIME
     </otherwise>
</choose>


 第一种错误写法导致的结果就是不会去做任何判断即使name不为空。为什么只能用<choose>标签,源码还没有研究,或者我这个例子本身就有问题现在记录下来,在后续的更新中我会再次总结一下这个问题。



2.

 <!--错误的写法-->        

<if test="newsImage != null and newsImage == 'y'">  
    <![CDATA[ and len(newsImage) > 0 ]]>  
</if>  

<!-- 正确的,稳定,推荐使用 -->  
<if test="newsImage != null and newsImage == 'y'.toString()">  
    <![CDATA[ and len(newsImage) > 0 ]]>  
</if>  

     判断 newsImage == 'y' 时,有人认为成功,但实际上是不成功的,需要改为  newsImage == 'y'.toString()方可成功,原因具体

细入研究,根据实际使用推测应该是 “等于” 在java中是个比较复杂问题,涉及的“等于”有可能是变量地址相等,或者是变量值内

容相等,在XML文件中简单的 == 在经过MyBatis处理后无法判断是哪种类型的“相等”,所以加.toString()做强制转换操作,MyBatis

就知道是值内容的比较,当然就成功了;注意这个常量不限于数字,对于字母,如 'y' 同样需要加上 .toString()方可成功。










相关文章推荐

Mybatis最入门---动态查询(choose,when,otherwise)

[一步是咫尺,一步即天涯] 接上文,由于篇幅的关系,我们继续来叙述动态变化的条件查询。上文中,我们实现了两种需求的查询:1.条件数量不可知的查询,2.集合类型条件的查询。本文,我们来介绍第三种需求的查...

mybatis choose标签的使用

有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。而使用if标签时,只要test中的表达式为 true,就会执行 if 标签中的条件。MyBatis 提供了 choose 元素。if标签是...

mybatis choose用法

choose标签是按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的s...

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

1.choose标签是按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则 choose 结束。 当 choose 中所有 when 的条件都不满则时,则执行 otherwise...

mybatis choose标签的用法

先上代码: choose>    when test="BEGINTIME != null and BEGINTIME != '' and ENDTIME != null and EN...
  • ITlyng
  • ITlyng
  • 2017年02月19日 13:00
  • 698

Mybatis中<choose> 的使用方法

官方文档上是这么说的:“有时我们不想应用所有的条件,相反我们想选择很多情况下的一种”我们就可以使用where..choose..when(+)..otherwise,这个语句与java中的switch...

mybatis choose when ==的应用。

例子如下:                 当iouStatus为1的时候,我们查询状态7006的数据。     当iouStatus为3的时候,我们查询状态7006,7007的数据。...

MyBatis--动态SQL---choose标签

choose类似于switch,只执行其中一个条件!!!!

mybatis里面xml中SQL语句if语句里嵌套if语句

mybatis里面xml中SQL语句if语句里嵌套if语句

MyBatis嵌套查询解析

Mybatis表现关联关系比hibernate简单,没有分那么细致one-to-many、many-to-one、one-to-one。而是只有两种association(一)、collection(...
  • canot
  • canot
  • 2016年05月24日 00:41
  • 12494
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mybatis的<if>和<choose>的区别 以及“=”判断
举报原因:
原因补充:

(最多只允许输入30个字)