hibernate多条件查询

1. Hibernate的Criteria这个东东,我觉得挺好的,它用于一个对象(也就是一张表)的各种查询非常好用,像:模糊查询,比较等等。(第一个是自己的,第二种是老陈的笔记)
以下是摘抄自课本上:
使用Criteria首先创建Criteria对象,与创建Query对象的语法很相似,但需要传入的参数是对应实体类的类型对象。然后使用Restrictions对象的静态方法(包括like,ge,gt,le,in等)构造查询条件,并添加进Criteria对象中。其中,like方法构造一个模糊查询的条件,第一个参数是参数名,第二个参数是查询条件的值,第三个参数是关键字匹配的方式,可选的有MatchMode.ANYWHERE,MatchMode.End,MatchMode.START和MatchMode.EXACT(精确查询)。ge表示构造大于等于的查询条件,gt则是大于,le则是小于等于,lt则是小于。最后,还可以通过Criteria的addOrder方法指定查询的排序方式。同样,分页查询的两个方法Criteria对象也支持,所以一般构造复杂的查询方法时候,我们采用Criteria的方式。

For Example:

//得到全部招聘信息
public static List getAllJob(long cid,long jobTypeId,long pd,String keyWord)
{
Session session=HibernateSessionFactory.getSession();
Criteria c=session.createCriteria(Job.class);
//取别名
c.createAlias("jobtype","jobtype");
c.createAlias("city","city");

if(cid!=0)
{
c.add(Restrictions.eq("city.id",cid));
}
if(jobTypeId!=0)
{
c.add(Restrictions.eq("jobtype.id",jobTypeId));
}
if(pd!=0)
{
//得到calendar实例,默认为当前时间
Calendar calendar=Calendar.getInstance();
//当前的日期减少pd天
calendar.add(Calendar.DAY_OF_MONTH, (int)-pd);
//得到前pd天的日期
Date date=calendar.getTime();
c.add(Restrictions.gt("publishdate",date));
}
if(!"".equals(keyWord))
{
c.add(Restrictions.like("title", keyWord,MatchMode.ANYWHERE));
}
List list=c.list();
session.close();
return list;
}


2.对象查询
1)对象查询只能够查询一个对象。也就是说对象查询不支持
关联查询
2)对象查询非常适合于对同一张表进行多条件查询
3)criteria的使用格式:
Session session=HibernateSessionFactory.getSession();
Criteria c=session.createCriteria(Emp.class);//创建一个实例
double minPay=3000;
double maxPay=5000;
//c.add(Restrictions.like("ename", "A",MatchMode.ANYWHERE));

//c.add(Restrictions.between("sal",minPay, maxPay));
//c.add(Restrictions.eq("job", "CLERK"));
c.add(Restrictions.eq("dept.dname", "SALES"));
List<Emp> empList=c.list();//返回的是一个对象集合
//没有加约束条件
for(Emp row:empList)
{
System.out.println(row.getEname());
}
4)criterian返回的永远都是对象集合
5)我要说话:
Criteria 的一个属性是关于另外一个对象的引用。那么我们就要
为这个属性创建别名

Session session=HibernateSessionFactory.getSession();
Criteria c=session.createCriteria(Emp.class);//创建一个实例
double minPay=3000;
double maxPay=5000;
//c.add(Restrictions.like("ename", "A",MatchMode.ANYWHERE));

//c.add(Restrictions.between("sal",minPay, maxPay));
//c.add(Restrictions.eq("job", "CLERK"));
c.createAlias("dept", "dept");//取别名
c.add(Restrictions.eq("dept.dname", "SALES"));
List<Emp> empList=c.list();//返回的是一个对象集合
//没有加约束条件
for(Emp row:empList)
{
System.out.println(row.getEname());
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值