Hibernate参数绑定示例

没有参数绑定,您必须像这样(错误代码)连接参数String:

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

将未经检查的值从用户输入传递到数据库会引起安全问题,因为它很容易通过SQL注入被黑客入侵。 您必须避免上面的错误代码,而应使用参数绑定。

休眠参数绑定

参数绑定有两种方法:命名参数或位置参数。

1.命名参数

这是最常见且用户友好的方式。 它使用冒号后跟参数名称(:example)来定义命名参数。 查看示例…

示例1 – setParameter

setParameter足够聪明,可以为您发现参数数据类型。

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

您可以使用setString告诉Hibernate此参数日期类型为String。

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

这个功能很棒! 您可以将对象传递到参数绑定中。 Hibernate将自动检查对象的属性并与冒号参数匹配。

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.位置参数

它使用问号(?)定义命名参数,并且您必须根据位置顺序设置参数。 参见示例…

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

此方法不支持setProperties函数。 此外,由于绑定参数位置的每次更改都需要更改参数绑定代码,因此容易遭到破坏。

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

结论

在Hibernate参数绑定中,我建议始终使用“ 命名参数 ”,因为它更易于维护,并且可以重用已编译的SQL语句(如果仅更改绑定参数)以提高性能。

翻译自: https://mkyong.com/hibernate/hibernate-parameter-binding-examples/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值