Exemples de liaison de paramètres Hibernate

Exemples de liaison de paramètres Hibernate

Sans liaison de paramètres, vous devez concaténer la chaîne de paramètres comme ceci (mauvais code):

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

Passer une valeur non contrôlée de l'entrée utilisateur à la base de données soulèvera des problèmes de sécurité, car il peut facilement être piraté par injection SQL. Vous devez éviter le mauvais code ci-dessus et utiliser la liaison de paramètres à la place.

Liaison de paramètres Hibernate

Il existe deux façons de lier les paramètres: les paramètres nommés ou la position.

1. Paramètres nommés

C'est le moyen le plus courant et le plus convivial. Il utilise deux points suivi d'un nom de paramètre (: exemple) pour définir un paramètre nommé. Voir des exemples…

Exemple 1 - setParameter

LesetParameter est suffisamment intelligent pour découvrir le type de données de paramètre pour vous.

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

Vous pouvez utilisersetString pour indiquer à Hibernate que ce type de date de paramètre est String.

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

Cette fonctionnalité est géniale! Vous pouvez passer un objet dans la liaison de paramètres. Hibernate vérifie automatiquement les propriétés de l’objet et correspond au paramètre deux-points.

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. Paramètres de position

Utilisez le point d'interrogation (?) Pour définir un paramètre nommé, et vous devez définir votre paramètre en fonction de la séquence de positions. Voir l'exemple…

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

Cette approche ne prend pas en charge la fonctionsetProperties. De plus, il est vulnérable à une rupture facile car chaque changement de position des paramètres de liaison nécessite une modification du code de liaison des paramètres.

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

Conclusion

Dans la liaison de paramètres Hibernate, je recommanderais de toujours opter pour «Named parameters», car il est plus facile à maintenir et l'instruction SQL compilée peut être réutilisée (si seuls les paramètres de liaison changent) pour augmenter les performances.