在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个等等)来查询数据。