2014-04-04 14 views
5

In der Mybatis-XML-Mapper-Datei habe ich versucht, die Aktualisierungsabfrage für die Benutzertabelle zu schreiben, wie unten gezeigt. Jeder der Eingabeparameter könnte null sein und ich würde nur aktualisieren, wenn es nicht null ist. Sie wissen nicht, welche 'if' Bedingung durchfallen könnte und welche die letzte sein könnte, daher muss in jeder Anweisung ein Komma hinzugefügt werden.MyBatis zusätzliches Komma in der Aktualisierungsabfrage

Das Problem ist, dass das zusätzliche ',' Abfrage Ausnahme verursacht. Es scheint, dass Mybatis zusätzliches Komma nicht ignoriert.

Meine Problemumgehung ist es, "ID = # {ID}" am Ende zu setzen, die das Problem behoben, aber es ist überflüssig.

Was ist die wirkliche Lösung?

Der Code:

<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> 
    id= #{id} // this is redundant 

    WHERE id = #{id} 
</update> 

PS: Die Umgebung Ich verwende ist: Java Spring + Mybatis + MySQL.

+0

Ich bin nicht vertraut mit 'mybatis' so verzeiht die dumme Frage, aber warum brauchen Sie ein Komma nach' # {email} 'in dem ersten Ort? –

+0

@ shree.pat18, im Fall von E-Mail == null aber Passwort! = Null, die letzte Anweisung vor WHERE ist Passwort = # {Passwort}, die ein zusätzliches Komma hat, also muss ich die Umgehung hinzufügen "id = # {id} ", was das Komma nach # {email} ergibt. –

Antwort

13

Dank MyBatis Generator ‚s mapper.xml Dateien, habe ich gelernt, wie man die Kommas zu unterdrücken. MyBatis hat ein Tag <set>, das das letzte Komma löscht. Es ist auch in MyBatis - Dynamic Sql geschrieben:

Hier wird das eingestellte Element dynamisch das Schlüsselwort SET Zierer und beseitigt auch alle überflüssigen Kommas, die den Wert Zuweisungen nach den Bedingungen angewandt nachlaufen können.

Sie können schreiben wie:

<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

Super, es funktioniert! Danke @Yigitalp Ertem. Akzeptiert die Antwort und +1. BTW, in Ihrem Code, SET ist dupliziert und es sollte entfernt werden. :) –

+0

Habe es beim Einfügen vergessen, danke dafür, ich habe die Antwort bearbeitet. :) – yalpertem

Verwandte Themen