Ich verwende seit kurzem mybatis und habe es auch schon zuvor verwendet, aber ich bin immer noch auf viele Probleme gestoßen.
Verwenden Sie zum Beispiel #{. } und ${} zum Übergeben von Parametern.
verwendet # zum Übergeben von Parametern. Beim Parsen der SQL-Anweisung wird beispielsweise „select * from table where name = #{name}“ hinzugefügt Der übergebene Name ist Xiao Li, dann wird er am Ende ausgedruckt. Der eine ist
select * from table where name = 'Xiao Li', der als String analysiert wird. Dies hat offensichtliche Vorteile gegenüber $, richtig? #{} Das Übergeben von Parametern kann die SQL-Injection verhindern. Wenn die Parameter, die Sie übergeben, in einfache Anführungszeichen stehen, meldet diese Methode einen Fehler.
Ein anderes Szenario ist if Wenn Sie eine dynamische Sortierung durchführen möchten, z. B. nach Spalte sortieren, verwenden Sie zu diesem Zeitpunkt unbedingt ${}, denn wenn Sie #{} verwenden, wird
select * from table order by“ gedruckt 'name', was nutzlos ist.
Wenn Sie # verwenden können, verwenden Sie derzeit nicht $.
Der Unterschied zwischen # und $ in mybatis
1. #Behandeln Sie die eingehenden Daten als eine Zeichenfolge. Den automatisch übergebenen Daten wird ein doppeltes Anführungszeichen hinzugefügt. Beispiel: order by #user_id#, wenn der übergebene Wert 111 ist, dann ist der in SQL analysierte Wert order by „111“. 🎜>
2. $ zeigt die eingehenden Daten direkt in SQL an und generiert sie. Beispiel: order by $user_id$, wenn der übergebene Wert 111 ist, dann ist der in SQL analysierte Wert order by user_id. Wenn der übergebene Wert id ist, wird der analysierte SQL-Wert nach id sortiert.
3. #Methode kann SQL-Injection weitgehend verhindern.
4. Die $-Methode kann die SQL-Injection nicht verhindern.
5. Die $-Methode wird im Allgemeinen verwendet, um Datenbankobjekte wie Tabellennamen zu übergeben.
6 Wenn # verwendet werden kann, verwenden Sie nicht $.
Wenn Sie beim Sortieren von MyBatis die Reihenfolge nach dynamischen Parametern verwenden, müssen Sie darauf achten, $ anstelle von # zu verwenden
String-Ersetzung
Standardmäßig wird die Formatsyntax #{} verwendet Veranlassen Sie MyBatis, ein Vorverarbeitungs-Anweisungsattribut zu erstellen und einen sicheren Wert (z. B. ?) dafür festzulegen. Das ist sicher, schnell und wird bevorzugt, manchmal möchte man einfach eine unveränderte Zeichenfolge direkt in die SQL-Anweisung einfügen. Sie können es beispielsweise wie ORDER BY wie folgt verwenden:
ORDER BY ${columnName}
Hier wird MyBatis die Zeichenfolge weder ändern noch maskieren.
Wichtig: Es ist nicht sicher, die Ausgabe des Benutzers zu akzeptieren und sie als unveränderliche Zeichenfolge in der Anweisung bereitzustellen. Dies führt zu potenziellen SQL-Injection-Angriffen. Daher sollten Sie Benutzern die Eingabe dieser Felder nicht gestatten oder sie generell umgehen und selbst überprüfen.
Eine kurze Zusammenfassung des Unterschieds zwischen $ und # in Mybatis
Vor nicht allzu langer Zeit kam jemand zu einem Vorstellungsgespräch in unser Unternehmen und unser Manager stellte diese Frage. Ich wusste nicht viel Darüber bin ich nach Baidu gegangen, um Nachforschungen anzustellen.
Tatsächlich ist der Unterschied sehr einfach. Sie werden es anhand eines Beispiels verstehen. Schreiben Sie einen SQL-Satz – zum Beispiel: select * from user_role where user_code = „100“;
Für diesen Satz müssen Sie select * from ${tableName} where user_code = #{userCode} schreiben.
Das $-Symbol wird also direkt in SQL geschrieben und das #-Symbol wird mit SQL in Form einer Zeichenfolge verbunden.
Weitere verwandte Artikel zum Unterschied zwischen den Parametern #{} und ${} in Mybatis und die Zusammenfassung des Unterschieds zwischen # und $ finden Sie im PHP Chinesische Website!