hibernate动态条件高级查询criteria

我们知道,我们在做项目时候,用到的最多的无非就是查询,各种条件查询.这个时候,如果我们再采用纯粹的hql语句来通过if判断的话,效率就十分低下而且会有很多判断.

那么,hibernate在3以后,推出了一个很有意义的对象DetachedCriteria,通过这个类,我们可以得到Criteira对象.然后可以利用Restrictions,Projection等,构造各种条件.

而且支持多表连接,外键关联查询,忽略大小写等.很实用.

DetachedCriteria dc = DetachedCriteria.forClass(Employee.class);
		Criteria cri = dc.getExecutableCriteria(getSession());
		cri.createAlias("department", "department");
		if (currEmp.getRole().getRoleId() == FinalVariable.SIMPLE_RID) {
			cri.add(Restrictions.eq("empId", currEmp.getEmpId()));
		} else if (currEmp.getRole().getRoleId() == FinalVariable.DEP_MANAGER_RID) {
			if (emp != null) {
				if (emp.getEmpId() != null) {
					cri.add(Restrictions.eq("empId", emp.getEmpId()));
				}
			}
			cri.add(Restrictions.eq("department.depId", currEmp.getDepartment()
					.getDepId()));
		} else {
			if (emp != null) {
				if (emp.getEmpId() != null) {
					cri.add(Restrictions.eq("empId", emp.getEmpId()));
				} else if (emp.getDepartment().getDepId() != null) {
					cri.add(Restrictions.eq("department.depId", emp
							.getDepartment().getDepId()));
				}
			}
			cri.addOrder(Order.asc("department.depId"));
		}
		return cri.list();


下面贴上,我自己写的一个小例子:

其中,员工里面有个Department引用.这个时候如果我们想用department下面的depId,我们需要使用criteria的createAlias("","");方法,首先创建一个别名,这样就可以用外键去关联查询了,发送的sql语句都是关联的查询.很方便.

你可能感兴趣的:(Hibernate)