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.