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,Criteria)