mybatis的 if test 条件判断字符串单双引号解析问题

标签: mybatis的if test 字符串单双引号解析
23人阅读 评论(0) 收藏 举报
分类:

昨天码代码,掉到坑里,耽误了几个小时才从坑里爬出来-_-|||

由于MyBatis是使用的OGNL表达式,所以

单个的字符要写到双引号里面才行,改为<if test='takeWay == "1"'>或者改为<if test="takeWay == '1'.toString() ">


.xml文件的部分代码

 <insert id="insertDelivery" parameterType="com.zuci.request.DeliveryPreferenceReq" >
      insert cx_customer_deliverypreference
       <trim prefix="(" suffix=")" suffixOverrides="," >
             .... 此处省略
         <if test="takeWay == '1' and workday != null ">
           WORKDAY,
         </if>
         ....
       </trim>

       <trim prefix="values (" suffix=")" suffixOverrides="," >
           .... 此处省略
          <if test="takeWay == '1' and workday != null ">
            #{workday, jdbcType=VARCHAR},
      </if>
      ....
       </trim>   
   </insert>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

takeWay == “1”处出错,导致不执行if判断中的sql,运行程序不报错,没有任何提示。去掉takeWay == “1” and 则可执行。对此我百思不得其解, 
因为自己有写过如下代码,是没错的。

 <if test="messageType == 'senderReceiveSuccess' ">
      ......
 </if>
  • 1
  • 2
  • 3

苦苦纠结了几个小时,最后是我的同事JW大神帮我解决的,膜拜大神o(≧v≦)o~~好棒 
<if test="takeWay == '1' and workday != null "> 
改为<if test='takeWay == "1" and workday != null '> 
或改为<if test="takeWay == '1'.toString() and workday != null ">即可。

原因是:mybatis是用OGNL表达式来解析的,在OGNL的表达式中,’1’会被解析成字符,java是强类型的,char 和 一个string 会导致不等,所以if标签中的sql不会被解析。 

总结下使用方法:单个的字符要写到双引号里面或者使用.toString()才行!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

补充:转载另一篇博客

在使用 MyBatis if 进行条件判断时,一直报错:

<if test="fwbdh != null and fwbdh == 'BAK'">
    fwbdh=#{fwbdh}
<if>

MyBatis是使用的OGNL表达式来进行解析的,改成:

<if test='fwbdh != null and fwbdh == "BAK"'>
    fwbdh=#{fwbdh}
<if>

同时,MyBatis的if、when里面的test表达式对参数进行判断时,可以调用java的java.lang.String中定义的方法:

比如:

<if test="fwbdh != null and fwbdh != ''">
	<choose>  
		<when test='fwbdh.indexOf(",") != -1'>  
			AND t.FWBDH  in (${fwbdh}) 
		</when>  
		<otherwise>   
	        	AND t.FWBDH like '%'+#{fwbdh}+'%'  
		</otherwise>  
	</choose> 
</if>

转载自:https://blog.csdn.net/u012780336/article/details/52921043

            https://blog.csdn.net/xxlian1201/article/details/52759349

查看评论

mybatis的<if test> 条件判断

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

mybatis 之 if test 条件

问题描述:mybatis 之 if test 条件,参数为0时,查询条件未输出。如,当 tagtype值为0(Integer),查询条件没有拼接 and tagtype=0。传入其他值(1,2,3.....
  • hurtheart517
  • hurtheart517
  • 2016-09-09 18:22:45
  • 44343

mybatis if test 相等的情况如何动态拼接sql

mybatis 中bug 在if test==1 的时候 并不执行里面代码 但是 将参数加到 if 里面的sql 里的时候 情况就好了...
  • majun_guang
  • majun_guang
  • 2015-08-16 18:29:54
  • 6421

Mybatis的if test字符串比较问题,mapper用等于又要用>比较<比较解决冲突

第一种解决方法: and msg.expire_time < now() 会报NumberFormatException,这样就可以了。 and msg.expire_time < ...
  • chenaini119
  • chenaini119
  • 2016-07-15 14:07:47
  • 22521

MyBatis 判断条件为等于的问题

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

Mybatis的if test字符串比较问题

and msg.expire_time &lt; now() 会报NumberFormatException,这样就可以了。 and msg.expire_time &lt; now() ...
  • dchjmichael
  • dchjmichael
  • 2013-04-27 17:19:41
  • 81374

【mybatis】IF判断的坑 (实现<if test=" status == 'zhangsan'">)

转自:http://blog.csdn.net/z69183787/article/details/51589171 最近在项目使用mybatis中碰到个问题  Xml代码   ...
  • qq_33432559
  • qq_33432559
  • 2016-11-29 18:09:22
  • 7498

MyBatis中动态SQL语句完成多条件查询

一看这标题,我都感觉到是mybatis在动态SQL语句中的多条件查询是多么的强大,不仅让我们用SQL语句完成了对数据库的操作;还通过一些条件选择语句让我们SQL的多条件、动态查询更加容易、简洁、直观。...
  • yanggaosheng
  • yanggaosheng
  • 2015-06-29 19:00:07
  • 34065

【<if test="takeWay == '0'">】mybatis的if判断有坑

昨天码代码,掉到坑里,耽误了几个小时才从坑里爬出来-_-|||单个的字符要写到双引号里面才行,改为.xml文件的部分代码 insert cx_customer_deli...
  • u012780336
  • u012780336
  • 2016-10-25 12:06:37
  • 14022

Mybatis if test 判断数字时需要注意

mybatis做if判断注意   mybatis做if 判断 注意:下面这种写法只适用于 id 类型为字符串.          id = #{id}      如果id类型为int 当id=0时 ...
  • u010802573
  • u010802573
  • 2015-04-01 13:38:21
  • 26564
    个人资料
    持之以恒
    等级:
    访问量: 4万+
    积分: 1087
    排名: 4万+