session.createQuery的参数绑定

本文深入探讨了参数绑定的概念,包括位置绑定和命名绑定,并通过Java代码实例展示了如何使用session.createQuery()方法进行参数设置,包括设置实体、字符串、整型等不同类型参数。同时介绍了setParameter()方法的使用及注意事项,如绑定日期类型时需要明确指定Hibernate映射类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参数绑定:
都支持位置绑定和命名绑定,
如:
Java代码
  1. session.createQuery("fromPersonwhereid=:id").setInteger("id",1);
  2. session.createQuery("fromPersonwhereid=?").setInteger(0,1);


基本的参数绑定:
setString()
setInteger();
等...


特殊的参数绑定
(1)setEntity()
Java代码
  1. Customercustomer=newCustomer();
  2. customer.setId(1);
  3. session.createQuery("fromOrderowhereo.customer=:customer").setEntity("customer",customer);

等价于
Java代码
  1. session.createQuery("fromOrderowhereo.customer.id=:customerid").setInteger("customerid",1);

(2)setParameter()
Java代码
  1. Queryquery=session.createQuery("fromOrderowhereo.customer=:customerando.orderNumberlike:orderNumber");
  2. query.setParameter("customer",customer,Hibernate.entity(Customer.class));

query.setParameter("orderNumber", orderNumber, Hibernate.STRING);
setParameter()方法的第三个参数显示指定Hibernate映射类型.以下代码用于绑定一个客户化映射类型.(关于客户化映射类型,参见:http://www.javaeye.com/topic/182797)
Java代码
  1. Queryquery=session.createQuery("fromCustomercwherec.homeAddress=:homeAddress");
  2. query.setParameter("homeAddress",homeAddress,Hibernate.custom(AddressUserType.class));

对于某些参数,Hibernate能跟根据参数值的Java类型推断出对应的映射类型,此时不需要在setParameter()方法中显式指定映射类型,如:
Java代码
  1. Queryquery=session.createQuery("fromOrderowhereo.customer=:customerando.orderNumberlike:orderNumber");
  2. query.setParameter("customer",customer);
  3. query.setParameter("orderNumber",orderNumber);

对于日期类型,如java.util.Date类型,会对应多种Hibernate映射类型,如Hibernate.DATE或Hibernate.TIMESTAMP,因此必须在setParameter()方法中显式指定到底对应哪种Hibernate映射类型,如:
Java代码
  1. Queryquery=session.createQuery("fromCustomercwherec.birthday=:birthday");
  2. query.setParameter("birthday",birthday,Hibernate.DATE);

(3)setProperties()方法:用于把命名参数与一个对象的属性值绑定,如:
Java代码
  1. Customercustomer=newCustomer();
  2. customer.setName("Tom");
  3. customer.setAge(21);
  4. Queryquery=session.createQuery("fromCustomerascwherec.name=:nameandc.age="age");
  5. query.setProperties(customer);

setProperties()调用setParameter()方法,setParameter()方法再根据Customer对象的属性的Java类型来推断Hibernate映射类型.如果命名参数为日期类型,不能通过setProperties()方法来绑定.
参数绑定对null是安全的.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值