按参数位置绑定 setXXX()方法第一个参数从0下标开始
public List<Emp> selectEmp(String job,double salary)
{
String hql="select emp from Emp as emp where emp.job=? and emp.salary>?";
return this.getCurrentSession().createQuery(hql)
.setString(0,job)
.setDouble(1,salary)
.list();
}
Hibernate:
select
emp0_.empNo as empNo1_,
emp0_.empName as empName1_,
emp0_.job as job1_,
emp0_.salary as salary1_
from
project.Emp emp0_
where
emp0_.job=?
and emp0_.salary>?
按参数名称绑定 命名参数以":"开头而且setXXX()方法第一个参数和:后面的字符串对应
String hql="select emp from Emp as emp where emp.job=:job and emp.salary>:salary";
return this.getCurrentSession().createQuery(hql)
.setString("job",job)
.setDouble("salary",salary)
.list();
Hibernate:
select
emp0_.empNo as empNo1_,
emp0_.empName as empName1_,
emp0_.job as job1_,
emp0_.salary as salary1_
from
project.Emp emp0_
where
emp0_.job=?
and emp0_.salary>?
Hibernate提供setParameter()方法用来绑定任意类型的参数,当不便指定参数的具体类型时,可以使用setParameter()为参数赋值
public List<Emp> selectEmp(Object[] condition)
{
String hql="select emp from Emp as emp where emp.job=? and emp.salary>?";
Query query=this.getCurrentSession().createQuery(hql);
if (condition!=null&&condition.length>0)
{
for (int i=0;i<condition.length;i++)
{
query.setParameter(i,condition[i]);
}
}
return query.list();
}
Hibernate:
select
emp0_.empNo as empNo1_,
emp0_.empName as empName1_,
emp0_.job as job1_,
emp0_.salary as salary1_
from
project.Emp emp0_
where
emp0_.job=?
and emp0_.salary>?
public List<Emp> selectEmp(Map<String, Object> conditions) {
String hql = "select emp from Emp as emp where emp.job=:job and emp.salary>:salary";
Query query = this.getCurrentSession().createQuery(hql);
if (conditions != null && conditions.size() > 0) {
/* Iterator<Map.Entry<String, Object>> iter = conditions.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String, Object> entry = iter.next();
String key = entry.getKey();
Object value = entry.getValue();
query.setParameter(key, value);
}*/
/* for (String key : conditions.keySet()) {
query.setParameter(key, conditions.get(key));
}*/
for (Map.Entry<String, Object> entry : conditions.entrySet()) {
query.setParameter(entry.getKey(), entry.getValue());
}
/* Iterator<String> iterator = conditions.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
Object value = conditions.get(key);
query.setParameter(key, value);
}*/
}
return query.list();
}
Hibernate:
select
emp0_.empNo as empNo1_,
emp0_.empName as empName1_,
emp0_.job as job1_,
emp0_.salary as salary1_
from
project.Emp emp0_
where
emp0_.job=?
and emp0_.salary>?
setProperties()方法绑定命名参数与一个对象的属性值(命名参数要和属性值对应)
package com.dto;
public class EmpForm {
private String job;
private double salary;
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public EmpForm() {
}
public EmpForm(String job, double salary) {
this.job = job;
this.salary = salary;
}
@Override
public String toString() {
return "EmpForm{" +
"job='" + job + '\'' +
", salary=" + salary +
'}';
}
}
public List<Emp> selectEmp(EmpForm empForm)
{
String hql="select emp from Emp emp where emp.job=:job and emp.salary>=:salary";
Query query=this.getCurrentSession().createQuery(hql);
query.setProperties(empForm);
return query.list();
}
Hibernate:
select
emp0_.empNo as empNo1_,
emp0_.empName as empName1_,
emp0_.job as job1_,
emp0_.salary as salary1_
from
project.Emp emp0_
where
emp0_.job=?
and emp0_.salary>=?
动态设置查询参数 根据用户实际输入的参数确定查询条件
public List<Emp> selectEmp(EmpForm empForm) {
StringBuilder hql = new StringBuilder("select emp from Emp emp where 1=1");
if (empForm.getJob() != null && empForm.getJob().length() > 0) {
hql.append(" and emp.job=:job");
}
if (empForm.getSalary() > 0) {
hql.append(" and emp.salary>=salary");
}
Query query = this.getCurrentSession().createQuery(hql.toString());
query.setProperties(empForm);
return query.list();
}
Hibernate:
select
emp0_.empNo as empNo1_,
emp0_.empName as empName1_,
emp0_.job as job1_,
emp0_.salary as salary1_
from
project.Emp emp0_
where
1=1
and emp0_.job=?