Was ist der Vorteil bei der Verwendung der JPA-Kriterien-API, wenn eine ParameterExpression direkt über eine Variable verwendet wird? Z.B. Wenn ich in einer String-Variablen nach einem Kunden anhand des Namens suchen möchte, könnte ich etwas wie
schreiben %Vor%Mit Parametern wird dies:
%Vor%Für Prägnanz würde ich den ersten Weg bevorzugen, besonders wenn die Abfrage mit optionalen Parametern länger wird. Gibt es Nachteile bei der Verwendung von Parametern wie SQL Injection?
Wenn ein Parameter verwendet wird (abhängig von der JPA-Implementierung, dem verwendeten Datenspeicher und dem JDBC-Treiber), wird die SQL für einen JDBC-Parameter optimiert. Wenn Sie dasselbe mit einem anderen Wert des Parameters ausführen, wird derselbe verwendet JDBC-Anweisung.
Die SQL-Injection ist immer dem Entwickler überlassen, ob sie eine Benutzereingabe validieren, die als Parameter verwendet wird.
Sie können ParameterExpression wie folgt verwenden: Angenommen, Sie haben einen Eingabefilter, ein Beispiel könnte das sein:
Fangen wir an: Erstellen Sie zuerst criteriaQuery und criteriaBuilder und root
%Vor%1) Inizialisieren Sie eine Prädikatliste (verwenden Sie für where-Klausel) und eine paramList (verwenden Sie für param)
%Vor%2 ) Überprüfen Sie, ob die Eingabe null ist und erstellen Sie predicateList und param
%Vor%3 ) Erstellen Sie die where-Klausel
%Vor%4 ) legen Sie den Parameterwert
fest %Vor%