W pliku mapującym Mybatis xml, próbowałem napisać zapytanie o aktualizację dla tabeli użytkownika, jak pokazano poniżej. Każdy parametr wejściowy może mieć wartość null i aktualizuję go tylko wtedy, gdy nie ma wartości null. Nie wiesz, który warunek "jeśli" może się przedostać i który z nich może być ostatnim, dlatego w każdym zestawieniu należy dodać przecinek.MyBatis dodatkowe przecinki w aktualizacji kwerendy
Problem polega na tym, że dodatkowe "," powoduje wyjątek zapytania. Wygląda na to, że Mybatis nie ignoruje dodatkowego przecinka.
Moim rozwiązaniem jest umieszczenie "id = # {id}" na końcu, który naprawił problem, ale jest zbędny.
Jakie jest prawdziwe rozwiązanie?
Kod:
<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: Środowisko używam jest: Java Wiosna + MyBatis + MySQL.
nie jestem zaznajomiony z 'mybatis' więc wybaczyć pytanie głupie, ale dlaczego trzeba przecinek po' # {email} 'w pierwszym miejsce? –
@ shree.pat18, w przypadku wiadomości e-mail == null, ale hasło! = Null, ostatnia instrukcja przed WHERE hasłem = # {hasło}, która ma dodatkowy przecinek, więc muszę dodać obejście "id = # {id} ", powodując przecinek po # {email}. –