`
Supanccy2013
  • 浏览: 213726 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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());
  }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics