MYBATIS中 if-test 判断大坑

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

单个的字符要写到双引号里面才行,改为<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>

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

因为自己有写过如下代码,是没错的。

<if test="messageType == 'senderReceiveSuccess' ">

      ......

</if>

把<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()才行!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,537评论 0 13
  • 我能帮的都帮了,刚刚说的你都记下来了吧。 二叔说,这孩子从小就多灾多病。我和二婶一开始不是很相信病就是不好也是没有...
    六加六阅读 191评论 0 0
  • 昨夜 梦到自己是一个傻姑娘 不见模样 只抓到一只臂膀 感觉到一个乱了节拍的心房 心中欢喜 便默默跟着走向了远方
    花朝三五阅读 171评论 0 1
  • 唐小生是沪金芽手女混混。什么是芽手,芽手就是初出茅庐的牛犊,是这个城市里的陌生人。混混又是为何,非此地人,无此地职...
    七月_布鲁斯阅读 432评论 2 0
  • 从考试前到现在 断断续续才把这电影看完 总害怕有惊悚之处 却发现没有注入太多灵魂之人的死亡并不是那么可怖 艾米的扮...
    许我清欢吧阅读 575评论 1 1