2014-04-04 48 views
5

在Mybatis xml映射文件中,我試圖爲User表編寫更新查詢,如下所示。每個輸入參數都可以爲null,並且只在它不爲null時才更新。你不知道哪個'如果'情況可能通過,哪一個可能是最後一個,因此在每個陳述中都必須加上逗號。更新查詢中的MyBatis額外逗號

問題是多餘的','會導致查詢異常。看來Mybatis不會忽略額外的逗號。

我的解決方法是在修復問題的末端添加「id =#{id}」,但它是多餘的。

真正的解決方案是什麼?

代碼:

​​

PS:我使用的環境是:Java的春天+的MyBatis + MySQL的。

+0

我不熟悉'mybatis'所以請原諒的愚蠢的問題,但爲什麼你需要#'後一個逗號{電子郵件}'第一地點? –

+0

@ shree.pat18,在電子郵件== null但密碼!= null的情況下,WHERE之前的最後一條語句是password =#{password},它有一個額外的逗號,所以我必須添加解決方法「id =# {id}「,在#{email}後產生逗號。 –

回答

13

感謝MyBatis Generator的mapper.xml文件,我學會了如何抑制逗號。 MyBatis有一個標記<set>,它將刪除最後一個逗號。它也寫在MyBatis - Dynamic Sql

這裏,set元素會動態前置SET關鍵字,並 也消除可能落後的條件後 分配應用價值的任何多餘的逗號。

你可以把它寫成:

<update id="update" parameterType="User"> 
    UPDATE user 
    <set> 
     <if test="username != null"> 
      username = #{username}, 
     </if> 
     <if test="password != null"> 
      password = #{password}, 
     </if> 
     <if test="email != null"> 
      email = #{email}, 
     </if> 
    </set> 
    WHERE id = #{id} 
</update> 
+0

太棒了,它的工作原理!謝謝@Yigitalp Ertem。接受答案和+1。順便說一句,在你的代碼中,SET是重複的,它應該被刪除。 :) –

+0

粘貼時忘了它,謝謝你,我編輯了答案。 :) – yalpertem