`

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

阅读更多

 通过Session得到Criteria类的对象

/**  
 * 用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对象

//在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);
	}

 

//在DAO层 查询
	 static List query(DetachedCriteria dc) 
	 {
		Session s = HibernateUtil.getSession();
		Criteria c = dc.getExecutableCriteria(s);  //这时须要一个session
		List rs = c.list();
		s.close();
		return rs;
	}

 

分享到:
评论
1 楼 yizhaorong 2013-09-24  
这种是在什么情况下用呢,好像没见过有人这么用

相关推荐

Global site tag (gtag.js) - Google Analytics