通过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();
- }
- }
伦理片 http://www.dotdy.com/
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;
- }