1. 程式人生 > >【】mybatis的if判斷有坑

【】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>

苦苦糾結了幾個小時,最後是我的同事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()才行!