Hibernate--使用setProperties()方法动态生成

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值