Criteria criteria = session.createCriteria(User.class); criteria.addOrder(Order.asc("age")); List users = criteria.list();setMaxResults()方法可以限定查询回来的笔数,如果配合setFirstResult()设定传回查询结果第一笔数据的位置,就可以实现简单的分页,例如传回第51笔之后的50笔数据(如果有的话):
Criteria criteria = session.createCriteria(User.class); criteria.setFirstResult(51); criteria.setMaxResult(50); List users = criteria.list();您可以对查询结果进行统计动作,使用Projections的avg()、rowCount()、count()、max()、min()、countDistinct()等方法,例如对查询结果的"age"作平均:
Criteria criteria = session.createCriteria(User.class); criteria.setProjection(Projections.avg("age")); List users = criteria.list(); Iterator iterator = users.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); }还可以配合Projections的groupProperty()来对结果进行分组,例如以"age"进行分组,也就是如果数据中"age"如果有20、20、25、30,则以下会显示20、25、30:
Criteria criteria = session.createCriteria(User.class); criteria.setProjection(Projections.groupProperty("age")); List users = criteria.list(); Iterator iterator = users.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); }
ProjectionList projectionList = Projections.projectionList(); projectionList.add(Projections.groupProperty("age")); projectionList.add(Projections.rowCount()); Criteria criteria = session.createCriteria(User.class); criteria.setProjection(projectionList); List users = criteria.list(); Iterator iterator = users.iterator(); while(iterator.hasNext()) { Object[] o = (Object[]) iterator.next(); System.out.println(o[0] + "\t" + o[1]); }如果有一个已知的对象,则可以根据这个对象作为查询的依据,看看是否有属性与之类似的对象,例如:
User user = new User(); user.setAge(new Integer(30)); Criteria criteria = session.createCriteria(User.class); criteria.add(Example.create(user)); List users = criteria.list(); Iterator iterator = users.iterator(); System.out.println("id \t name/age"); while(iterator.hasNext()) { User ur = (User) iterator.next(); System.out.println(ur.getId() +" \t " + ur.getName() +"/" +ur.getAge()); }在这个例子中,user对象中有已知的属性"age"为30,使用Example会自动过滤掉user的空属性,并以之作为查询的依据,也就是找出"age"同为30的数据。
Criteria roomCriteria = session.createCriteria(Room.class); Criteria userCriteria = roomCriteria.createCriteria("users"); userCriteria.add(Restrictions.eq("age", new Integer(30))); List rooms = roomCriteria.list(); // 只列出users属性中有user之"age"为30的Room Iterator iterator = rooms.iterator();