Criteria接口:用来设置各种查询条件的
1.Criterion 是 Criteria 的查询条件。
2.Criteria 提供了 add(Criterion criterion) 方法来添
加查询条件。
3.Criterion 的实例可以通过 Restrictions 工具类来
创建, Restrictions 提供了大量的静态方法,如 eq
(等于)、 ge (大于等于)、 between 等来方法
的创建 Criterion查询条件( SimpleExpression 实例)
4.除此之外,Restrictions 还提供了方法来创建
conjunction 和 disjunction 实例,通过往该实例的
add(Criteria) 方法来增加查询条件形成一个查询
条件集合。
Restrictions类的方法:

1.Projection 主要是让 Criteria 能够进行报表查询,并可以实现分组。 Projection主要有 SimpleProjection、 ProjectionList和 Property 三个实现。其中 SimpleProjection和 ProjectionList的实例化是由内建的 Projections 来完成,如提供的 avg、 count 、 max 、 min 、 sum 可以让开发者很容易对某个字段进行统计查询。
2. Property 是对某个字段进行查询条件的设置,如通过
Porperty.forName(“color”).in(newString[]{“black”,”red”,”write”});
则可以创建一个 Criterion实例。
3.通过 criteria 的 setProjection(Projection) 方法加入到查询条件中去。
Projections的方法:

示例查询:
-
-
- Map address = new HashMap();
- address.put("province", "province");
- address.put("city", "city");
- address.put("street", "street");
- address.put("number", new Integer(111));
-
- Criteria crit = session.createCriteria(Customer.class);
- crit.add(Restrictions.eq("saddress", address));
- ProjectionList prolist = Projections.projectionList();
- prolist.add(Projections.property("id_no"));
- prolist.add(Projections.property("name"));
-
- crit.setProjection(prolist)
- .createAlias("Accounts", "ac")
- .add(Property.forName("ac.id_a").eq(new Long(43)));
-
- java.util.List results = crit.list();
-
- Iterator it = results.iterator();
- while(it.hasNext()){
- Object[] stu = (Object[])it.next();
- System.out.println(stu[0]+" "+stu[1]);
- }
- System.out.println("-----------------");
-
-
-
-
-
-
-
- Criteria crit2 = session.createCriteria(Account.class);
- Criterion dis = Restrictions.disjunction()
- .add(Restrictions.gt("money", new Long(600)));
-
- crit2.createAlias("customer", "cu1");
- crit2.add(Restrictions.conjunction()
- .add(Restrictions.eq("cu1.id_no", new Long(300)))
- .add(Restrictions.between("id_a", new Long(30), new Long(39)))
- .add(dis));
- ProjectionList prolist2 = Projections.projectionList();
- prolist2.add(Projections.property("id_a"));
- prolist2.add(Projections.property("money"));
- crit2.setProjection(prolist2);
- java.util.List results2 = crit2.list();
- Iterator it2 = results2.iterator();
- while(it2.hasNext()){
- Object[] stu = (Object[])it2.next();
- System.out.println(stu[0]+" "+stu[1]);
- }
- System.out.println("-----------------");
-
-
- Map address2 = new HashMap();
- address2.put("province", "province");
- address2.put("city", "city");
-
-
- Customer cu3 = new Customer();
- cu3.setSaddress(address2);
- Criteria crit3 = session.createCriteria(Customer.class);
- crit3.add(Example.create(cu3));
-
-
-
-
- ProjectionList prolist3 = Projections.projectionList();
- prolist3.add(Projections.property("id_no"));
- prolist3.add(Projections.property("name"));
-
- crit3.setProjection(prolist3);
-
-
-
- java.util.List results3 = crit3.list();
-
- Iterator it3 = results3.iterator();
- while(it3.hasNext()){
- Object[] stu = (Object[])it3.next();
- System.out.println(stu[0]+" "+stu[1]);
- }
- System.out.println("-----------------");
-
-
- java.util.List results4 = session.createQuery("select co.id_no, co.name, ac.id_a, ac.money from Customer co inner join co.Accounts ac").list();
-
- Iterator it4 = results4.iterator();
- while(it4.hasNext()){
- Object[] stu = (Object[])it4.next();
- System.out.println(stu[0]+" "+stu[1]+" "+stu[2]+" "+stu[3]);
- }
结果:
299 小白
-----------------
37 655
38 657
-----------------
299 小白
300 小白
-----------------
200 man32 27 655
200 man32 28 1335
211 man32 29 555
211 man32 30 555
222 man32 31 555
222 man32 32 555
233 man32 33 555
233 man32 34 555
299 小白 43 555
300 小白 35 555
300 小白 36 555
300 小白 37 655
300 小白 38 657
300 小白 39 555
300 小白 40 755
300 小白 41 555
300 小白 42 555
end