Criteria查询,DetachedCriteria离线查询 --做综合查询

通过Session得到Criteria类的对象

Java代码 复制代码  收藏代码
  1. /**    
  2.  * 用Criteria方便的综合查询 Criteria类有丰富的比较方法    
  3.  *     
  4.  * 如:大于,小于,等于, not null, in,null, like, isEmpty....    
  5.  */     
  6. public static void select()      
  7. {      
  8.     Session s = null;      
  9.     try     
  10.     {      
  11.         s = HibernateUtil.getSeesion();      
  12.      
  13.         //得到Criteria对象      
  14.         final Criteria c = s.createCriteria(User.class);      
  15.      
  16.         //添加查询条件 ,eq()表示等于,第一个参数是User类上的属性名, 第二个参数是值 .      
  17.         c.add(Restrictions.eq("name""zl"));      
  18.         c.add(Restrictions.lt("birthday"new Date())); //lt()表示小于      
  19.      
  20.         //下面两个条件是 或的关系,可以注意观察输出的SQL语句      
  21.         c.add(Restrictions.or(Restrictions.eq("name""wj"), Restrictions.eq("name""name0")));      
  22.         // 分页      
  23.         c.setFetchSize(10); //从第10条记录起      
  24.         c.setMaxResults(10); //查出10条记录      
  25.      
  26.         //执行查询      
  27.         final List<User> list = c.list();      
  28.         for (final User u : list)      
  29.         {      
  30.             System.out.println(u.getId() + " " + u.getName());      
  31.         }      
  32.     }      
  33.     finally     
  34.     {      
  35.         s.clear();      
  36.     }      
  37. }    
/**  
 * 用Criteria方便的综合查询 Criteria类有丰富的比较方法  
 *   
 * 如:大于,小于,等于, not null, in,null, like, isEmpty....  
 */  
public static void select()   
{   
    Session s = null;   
    try  
    {   
        s = HibernateUtil.getSeesion();   
  
        //得到Criteria对象   
        final Criteria c = s.createCriteria(User.class);   
  
        //添加查询条件 ,eq()表示等于,第一个参数是User类上的属性名, 第二个参数是值 .   
        c.add(Restrictions.eq("name", "zl"));   
        c.add(Restrictions.lt("birthday", new Date())); //lt()表示小于   
  
        //下面两个条件是 或的关系,可以注意观察输出的SQL语句   
        c.add(Restrictions.or(Restrictions.eq("name", "wj"), Restrictions.eq("name", "name0")));   
        // 分页   
        c.setFetchSize(10); //从第10条记录起   
        c.setMaxResults(10); //查出10条记录   
  
        //执行查询   
        final List<User> list = c.list();   
        for (final User u : list)   
        {   
            System.out.println(u.getId() + " " + u.getName());   
        }   
    }   
    finally  
    {   
        s.clear();   
    }   
}  

DetachedCriteria 在构造时不须要Session对象,可以在没有Session时完成拼接查询条件,要执行时才须要Session对象

Java代码 复制代码  收藏代码
  1. //在Action中 拼查询条件   
  2.     public ActionForward Action (....)   
  3.     {    
  4.          DetachedCriteria dc = DetachedCriteria.forClass(User.class);   
  5.          String name = request.getParameter("name");   
  6.            
  7.         //拼查询条件   
  8.          if (name != null)   
  9.             dc.add(Restrictions.eq("name", name));   
  10.          int age = request.getParameter("age");   
  11.          if(age > 0)   
  12.              dc.add(Restrictions.eq("age", age));   
  13.          List users = query(dc);   
  14.     }  
//在Action中 拼查询条件
	public ActionForward Action (....)
	{ 
		 DetachedCriteria dc = DetachedCriteria.forClass(User.class);
		 String name = request.getParameter("name");
		
		//拼查询条件
		 if (name != null)
			dc.add(Restrictions.eq("name", name));
		 int age = request.getParameter("age");
		 if(age > 0)
			 dc.add(Restrictions.eq("age", age));
		 List users = query(dc);
	}

 

Java代码 复制代码  收藏代码
  1. //在DAO层 查询   
  2.      static List query(DetachedCriteria dc)    
  3.      {   
  4.         Session s = HibernateUtil.getSession();   
  5.         Criteria c = dc.getExecutableCriteria(s);  //这时须要一个session   
  6.         List rs = c.list();   
  7.         s.close();   
  8.         return rs;   
  9.     }  
//在DAO层 查询
	 static List query(DetachedCriteria dc) 
	 {
		Session s = HibernateUtil.getSession();
		Criteria c = dc.getExecutableCriteria(s);  //这时须要一个session
		List rs = c.list();
		s.close();
		return rs;
	}

猜你喜欢

转载自aguang520.iteye.com/blog/1166221