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标签的使用

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

mybatis的<if test> 条件判断

在使用 MyBatis if 进行条件判断时,一直报错: if test="fwbdh != null and fwbdh != ''"> fwbdh= #{fwbdh} if>123123 My...
  • xxlian1201
  • xxlian1201
  • 2016年10月08日 18:17
  • 25539

MyBatis 判断条件为等于的问题

在用MyBatis操作数据库的时候相信很多人都用到,当在判断null, 大于,大于等于,小于,小于等于,不等于时估计很多都用到,比较容易实现了,这里就省略了,但唯独判断条件为等于时估计蛮多人遇到坑了,...
  • shenzhenNBA
  • shenzhenNBA
  • 2015年06月28日 21:56
  • 40556

MyBatis学习 之 三、动态SQL语句

三、动态SQL语句          有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可能是空的,也许我们需要参数为空时,是查出全部的...
  • glarystar
  • glarystar
  • 2011年07月31日 09:46
  • 12171

mybatis的条件判断与集合操作

if应用: keyWord是传进来的参数,判断是否为空和值是否等于空值 IN 集合操作: open="(" separator="," close=")"> #{item} idList...
  • Brady74
  • Brady74
  • 2017年04月06日 23:11
  • 664

MyBatis Mapper.xml各种判断

1.判断String是否为空 if test="stringParam != null and stringParam != ''"> 2.判断Integer是否大于0 if test="i...
  • feng_926701
  • feng_926701
  • 2017年02月18日 13:51
  • 6158

mybatis if 条件判断 = like

'1'.toString()"> 1 or a.bab214 is null)]]>
  • zjutke
  • zjutke
  • 2014年07月10日 16:49
  • 1791

关于mybatis中基本类型条件判断问题

一:发现问题 sql动态语句中如果 parameterType="int" select cmpid,cmpname from campusinfo where state!='d' an...
  • w1014074794
  • w1014074794
  • 2015年09月24日 21:15
  • 818

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

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

MyBatis-动态SQL的if、choose、when、otherwise、trim、where、set、foreach使用

动态SQL是MyBatis最强大的特性之一。用于实现动态SQL的主要元素如下: 1、if 2、choose、when、otherwise 3、trim、where、set 4、foreach代...
  • qq_32588349
  • qq_32588349
  • 2016年05月30日 22:49
  • 11293
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mybatis的<if>和<choose>的区别 以及“=”判断
举报原因:
原因补充:

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