Okay, es ist fast ein Jahr her, seit ich mit der Entwicklung begonnen habe. Ich habe immer die Blogs anderer Leute gelesen, aber ich bin zu faul zum Schreiben und weiß nicht, wie man bloggt. Fangen wir heute langsam an, das Bloggen zu üben. Ich bin vor einiger Zeit in meiner Firma auf dieses Problem gestoßen.
1. Beispiele
select * from user where name = "dato"; select * from user where name = #{name}; select * from user where name = '${name}';
Unter normalen Umständen werden wir hier nichts anderes bemerken. Weil diese SQL unseren Zweck erfüllen kann, den Benutzer mit dem Namen dato abzufragen.
2. Unterschiede
Dynamic SQL ist eine der leistungsstarken Funktionen von mybatis und ein wichtiger Grund, warum es anderen ORM-Frameworks überlegen ist. Bevor mybatis die SQL-Anweisung vorkompiliert, analysiert es das SQL dynamisch und analysiert es in ein BoundSql-Objekt, in dem auch das dynamische SQL verarbeitet wird. In der dynamischen SQL-Analysephase weisen #{ } und ${ } unterschiedliche Leistungen auf.
select * from user where name = #{name};
#{} wird während der dynamischen Analyse in eine Parametermarkierung analysiert. Das heißt, die Anweisung nach dem Parsen lautet:
select * from user where name = ?;
Wenn wir dann ${} verwenden, füllt
select * from user where name = '${name}';
${} die Parameter aus, die wir beim dynamischen Parsen als String-Strings übergeben haben Unsere Anweisung wird zur folgenden Anweisung
select * from user where name = "dato";
Die SQL-Anweisung vor der Vorkompilierung enthält keine Variablen mehr und besteht aus vollständig konstanten Daten. Es entspricht unserem gewöhnlichen SQL ohne Variablen.
Zusammenfassend lässt sich sagen, dass die Ersetzungsphase von ${ }-Variablen in der dynamischen SQL-Analysephase erfolgt, während die Ersetzung von #{ }-Variablen im DBMS erfolgt.
Das ist der Hauptunterschied, den wir zwischen #{} und ${} sehen können. Darüber hinaus gibt es folgende Unterschiede:
Der Weg kann sehr groß sein Verhindern Sie die SQL-Injektion bis zu einem gewissen Grad. Die Methode
$ kann die SQL-Injection nicht verhindern.
$-Methode wird im Allgemeinen verwendet, um Datenbankobjekte wie Tabellennamen zu übergeben.
Verwenden Sie im Allgemeinen nicht $, wenn Sie können Verwenden Sie #.
Wenn wir also mybatis verwenden, versuchen wir, die #-Methode zu verwenden! ! ! Darauf sollte jeder achten
Empfohlenes Tutorial: „Java Tutorial“
Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen ${ } und #{ } in Java Mybatis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!