Wann soll $ vs # verwendet werden?

8

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 # ?

verwendet werden soll     
Cataclysm 10.10.2016, 08:34
quelle

1 Antwort

10

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.

    
Pau 10.10.2016, 08:54
quelle

Tags und Links