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

ゞ 浴缸里的玫瑰 2022-07-14 23:15 345阅读 0赞

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

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


.xml文件的部分代码

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

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

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

苦苦纠结了几个小时,最后是我的同事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()才行!

发表评论

表情:
评论列表 (有 0 条评论,345人围观)

还没有评论,来说两句吧...

相关阅读