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.