在Hibernate中可以使用setProperties()方法,将命名参数与一个对象的属性值绑定在一起!
查询工资>1000,职位是CLERK,雇佣日期从1980-10-1 到1983-10-1?
--sql语句如下:
select * from emp where sal>1000 and job='CLERK' and hiredate>to_date('1980-12-01','yyyy-MM-dd')
and hiredate<to_date('1983-01-1','yyyy-MM-dd')
1)封装对象(有4个属性)
/**
* 封装条件
* @author Administrator
*
*/
public class EmpCondition {
private String jobs;
private Double salary;
private Date hiredateStart;
private Date hiredateEnd;
public String getJobs() {
return jobs;
}
public void setJobs(String jobs) {
this.jobs = jobs;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
public Date getHiredateStart() {
return hiredateStart;
}
public void setHiredateStart(Date hiredateStart) {
this.hiredateStart = hiredateStart;
}
public Date getHiredateEnd() {
return hiredateEnd;
}
public void setHiredateEnd(Date hiredateEnd) {
this.hiredateEnd = hiredateEnd;
}
}
2)使用这个实体类
@Test
public void list6() {
// 1.获得会话对象
Session session = HibernateUtil.currentSession();
// 条件对象
EmpCondition condition = new EmpCondition();
condition.setJobs("CLERK");
condition.setSalary(1000.0);
condition.setHiredateStart(Tool.strOrDate("1980-12-01", "yyyy-MM-dd"));
condition.setHiredateEnd(Tool.strOrDate("1983-01-01", "yyyy-MM-dd"));
// 2sql
StringBuffer hql = new StringBuffer("from Emp e where 1=1");
// 判断当前对象是否为空
if (null != condition.getSalary()) {
hql.append(" and e.sal>:salary");
}
if (null != condition.getJobs()) {
hql.append(" and e.job=:jobs");
}
if (null != condition.getHiredateStart()) {
hql.append(" and e.hiredate>:hiredateStart");
}
if (null != condition.getHiredateEnd()) {
hql.append(" and e.hiredate<:hiredateEnd");
}
// 3.获得Query对象
Query query = session.createQuery(hql.toString());
// 动态生成/
query.setProperties(condition);
// //
// 4.获得list对象
List<Emp> list = query.list();
// 5.遍历数据
for (Emp emp : list) {
System.out.println(emp.getEmpno() + "\t" + emp.getEname() + "\t"
+ emp.getJob() + "\t" + emp.getSal() + "\t"
+ emp.getHiredate());
}
// 6.将会话关闭
session.close();
}
3)可以根据具体的条件(可以是1个或2个或3个或4个等等)来查询数据。