Hibernate Beispiele für die Parameterbindung

Beispiele für die Bindung von Hibernate-Parametern

Ohne Parameterbindung müssen Sie den Parameter String wie folgt verketten (falscher Code):

String hql = "from Stock s where s.stockCode = '" + stockCode + "'";
List result = session.createQuery(hql).list();

Wenn Sie einen ungeprüften Wert von der Benutzereingabe an die Datenbank übergeben, wird dies zu Sicherheitsbedenken führen, da es durch SQL-Injection leicht zu Hacking kommen kann. Sie müssen den obigen fehlerhaften Code vermeiden und stattdessen die Parameterbindung verwenden.

Parameterbindung im Ruhezustand

Es gibt zwei Möglichkeiten, Parameter zu binden: Named Parameters oder Positional.

1. Benannte Parameter

Dies ist die gebräuchlichste und benutzerfreundlichste Methode. Es wird ein Doppelpunkt gefolgt von einem Parameternamen (: Beispiel) verwendet, um einen benannten Parameter zu definieren. Beispiele ansehen…

Beispiel 1 - setParameter

DassetParameter ist intelligent genug, um den Parameterdatentyp für Sie zu ermitteln.

String hql = "from Stock s where s.stockCode = :stockCode";
List result = session.createQuery(hql)
.setParameter("stockCode", "7277")
.list();
Beispiel 2 - setString

Sie könnensetString verwenden, um Hibernate mitzuteilen, dass dieser Parameterdatentyp String ist.

String hql = "from Stock s where s.stockCode = :stockCode";
List result = session.createQuery(hql)
.setString("stockCode", "7277")
.list();
Beispiel 3 - setProperties

Diese Funktion ist großartig! Sie können ein Objekt an die Parameterbindung übergeben. Der Ruhezustand überprüft automatisch die Eigenschaften des Objekts und stimmt mit dem Doppelpunkt-Parameter überein.

Stock stock = new Stock();
stock.setStockCode("7277");
String hql = "from Stock s where s.stockCode = :stockCode";
List result = session.createQuery(hql)
.setProperties(stock)
.list();

2. Positionsparameter

Es wird ein Fragezeichen (?) Verwendet, um einen benannten Parameter zu definieren, und Sie müssen Ihren Parameter entsprechend der Positionsreihenfolge einstellen. Siehe Beispiel…

String hql = "from Stock s where s.stockCode = ? and s.stockName = ?";
List result = session.createQuery(hql)
.setString(0, "7277")
.setParameter(1, "DIALOG")
.list();

Dieser Ansatz unterstützt diesetProperties-Funktion nicht. Außerdem kann es leicht beschädigt werden, da bei jeder Änderung der Position der Bindungsparameter der Parameterbindungscode geändert werden muss.

String hql = "from Stock s where s.stockName = ? and s.stockCode = ?";
List result = session.createQuery(hql)
.setParameter(0, "DIALOG")
.setString(1, "7277")
.list();

Fazit

Bei der Hibernate-Parameterbindung würde ich empfehlen, immer "Named parameters" zu wählen, da dies einfacher zu warten ist und die kompilierte SQL-Anweisung wiederverwendet werden kann (wenn sich nur die Bindungsparameter ändern), um die Leistung zu steigern.