Ich bin verwirrt über die Verwendung von $ vs #
. Ich habe keine Anleitungen dafür gefunden. Ich habe sie als
name = #{name}
, name like '%${word}%'
, order by name ${orderAs}
, where name = #{word}
verwendet
Manchmal sind diese funktionieren gut, aber manchmal sind Parameter nicht enthalten oder gab mir Fehler wie
org.apache.ibatis.reflection.ReflectionException: Es gibt kein Getter für die Eigenschaft namens 'name' .......
Ich würde gerne wissen, wann $
oder #
?
Nach den myBatis
-Richtlinien wird #{}
in Ihren SQL-Anweisungen verwendet.
Wenn Sie eine der MyBatis-Referenzen im Abschnitt Mapper-XML-Dateien ansehen es sagt Explikation:
Beachten Sie die Parameternotation:
#{id}
Sonst ist ${}
für
1- Konfiguration Eigenschaften .
Zum Beispiel:
%Vor%Dann können die Eigenschaften wie folgt verwendet werden:
%Vor% 2- String Substitution ${}
( Abschnitt Parameter ):
Standardmäßig wird MyBatis mit der Syntax # {} erzeugt PreparedStatement - Eigenschaften und setzen Sie die Werte sicher gegen die PreparedStatement-Parameter (z.B.?). Während das sicherer, schneller und ist fast immer bevorzugt, manchmal möchte man einfach direkt eine spritzen String unmodifiziert in die SQL-Anweisung. Zum Beispiel für ORDER BY, Sie könnten etwas wie folgt verwenden:
ORDER BY $ {columnName}
Hier wird MyBatis die Zeichenkette nicht ändern oder die Zeichenkette nicht entfernen.
HINWEIS Es ist nicht sicher, Eingaben von einem Benutzer zu akzeptieren und an a Aussage unmodifiziert auf diese Weise. Dies führt zu potentiellem SQL Injection-Angriffe und daher sollten Sie Benutzereingaben entweder verbieten in diesen Feldern, oder führen Sie immer eigene Fluchten und Überprüfungen durch.
Also definitiv in name like '%${word}%' or
Reihenfolge nach Name $ {orderAs} 'Sie müssen String Substitution nicht eine vorbereitete Anweisung verwenden.