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语句都是关联的查询.很方便.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值