Ich habe in letzter Zeit MyBatis benutzt. Ich habe Ibatis schon einmal benutzt. Insgesamt ist es ähnlich, aber ich habe immer noch viele Probleme gestoßen. Ich werde es wieder aufnehmen.
Zum Beispiel die Differenz zwischen der Verwendung von #{} und $ {} Parameterübertragung,
Verwenden Sie #, um den Parameter zu übergeben, und die SQL -Anweisung Parsing wird "" hinzufügen, z.
Wählen Sie * Aus der Tabelle, wobei Name = 'Xiao li', es wird als Zeichenfolge analysiert. Das ist offensichtlich besser als $. Das Passieren von #{} kann die SQL -Injektion verhindern. Wenn der Parameter, in dem Sie übergeben, einzelne Zitate sind. Wenn Sie $ {} verwenden, meldet diese Methode einen Fehler.
Ein weiteres Szenario ist, dass, wenn Sie eine dynamische Sortierung durchführen möchten, z. B. Order By Spalte
Wählen Sie * aus der Tabelle Order mit 'Name', das ist nutzlos.
Wenn Sie #verwenden können, verwenden Sie derzeit nicht $.
Unterschied zwischen # und $ in mybatis
1. # Behandeln Sie alle eingehenden Daten als Zeichenfolge und fügen Sie den automatisch eingehenden Daten doppelte Zitate hinzu. Zum Beispiel: Bestellung von #user_id #, wenn der in 111 übergabe Wert 111 ist, ist der Wert beim Parsen in SQL durch "111" bestellt. Wenn der in ID IS -ID übergebene Wert an SQL analysiert wird, ist sie von "ID" bestellt.
2. Zeigt $ die übergebenen Daten direkt an und generiert sie in SQL. Zum Beispiel: Bestellung von $ user_id $, wenn der in SQL übergebene Wert 111 beträgt, ist der Wert von user_id. Wenn der in IS is ID übergebene Wert an SQL analysiert wird, ist die Bestellung durch ID.
3. Die # Methode kann die SQL -Injektion stark verhindern.
4. Die $ -Methode kann die SQL -Injektion nicht verhindern.
5. Die $ -Methode wird im Allgemeinen verwendet, um Datenbankobjekte zu übergeben, z. B. in Tabellennamen.
6. Im Allgemeinen, wenn Sie #verwenden können, verwenden Sie nicht $.
Bei Verwendung von Auftrag nach dynamischen Parametern beim Sortieren von MyBatis müssen Sie darauf achten, $ anstelle von # zu verwenden
Saitenersatz
Die Verwendung der #{} -Format -Syntax führt standardmäßig zu MyBatis, um eine vorverarbeitete Anweisung Eigenschaft zu erstellen und einen sicheren Wert damit als Hintergrund festzulegen (z. B.?). Dies ist sicher und schnell, und manchmal möchten Sie nur eine Zeichenfolge einfügen, die nicht direkt in die SQL -Anweisung ändert. Zum Beispiel können Sie wie Order by es so verwenden:
Bestellung von $ {columnName}
Hier wird MyBatis keine Zeichenfolgen ändern oder entkommen.
Wichtig: Es ist nicht sicher, die Inhaltsausgabe vom Benutzer zu akzeptieren und eine unveränderte Zeichenfolge in der Anweisung zu geben. Dies kann zu potenziellen SQL -Injektionsangriffen führen, sodass Sie den Benutzern nicht erlauben sollten, diese Felder zu betreten oder normalerweise selbst zu entkommen und selbst zu überprüfen.
Eine kurze Zusammenfassung des Unterschieds zwischen $ und # in mybatis
Vor nicht allzu langer Zeit kam jemand zu einem Interview in unsere Firma. Unser Manager stellte diese Frage. Ich hatte nur ein wenig Verständnis dafür, also ging ich nach Baidu.
Tatsächlich ist der Unterschied sehr einfach. Sie werden es mit einem Beispiel verstehen. Schreiben Sie einen Satz SQL-für Beispiel: Wählen Sie * aus user_role, wobei user_code = "100";
In diesem Satz muss es als SELECT * aus $ {tableName} geschrieben werden, wobei user_code = {userCode}
Daher wird das $ charakter direkt in SQL geschrieben, während das # Zeichen mit SQL in Form einer Zeichenfolge geschrieben wird.