会计考友 发表于 2012-8-4 12:37:27

JAVA基础:Hibernate数据查询(3)

for(int i = 0 ; i < list.size(); i++)   {
  obj = (Object[])list.get(i);
  group = (Group)obj;//group是数组是第一个对象
  stu = (Student)obj;//stu是数组的第二个对象
  System.out.println(stu.getName()+"属于"+group.getName());
  }
  Criteria Query方式
  当查询数据时,往往需要设置查询条件。在SQL或HQL语句中,查询条件常常放在where子句中。此处Hibernate还支持 Criteria查询,这种查询方式把查询条件封装为一个Criteria对象。在实际应用中,可以使用Session的 createCriteria()方法构建一个org.hibernate.Criteria实例,然后把具体的查询条件通过Criteria的add方法加入到Criteria实例中。这样程序员可以在不使用SQL甚至HQL的情况下进行数据查询。如下:   public void criteriaDEMO()
  {
  Session session = HibernateUtil.currentSession();
  Criteria criteria = session.createCriteria(TRegister.class);//生成一个Criteria实例
  criteria.add(Restrictions.eq("userName","fengyan"));//等价于where name = 'fengyan'
  List list = criteria.list();
  TRegister user = (TRegister)list.get(0);
  System.out.println(user.getUserName());
  }
  常用的查询限制方法
  上面代码中 Restrictions.eq()方法表示equal,即等于的情况。Restrictions类提供了查询限制机制。它提供了许多方法,以实现查询限制
  Restrictions.eq():equal,=
  Restrictions.allEq(): 参数为Map对象,使用key/value进行多个等于的对比,相当于多个                                      Restrictions.eq()的效果

  Restrictions.gt():greater-than,

会计考友 发表于 2012-8-4 12:37:28

JAVA基础:Hibernate数据查询(3)

</p>  下面是几个查询限制的例子:
  查询学生名字以t开关的所有Student对象
  Criteria criertia = session.createCriteria(Student.class);
  criteria.add(Restrictions.like("name", "t%"));
  List list = criteria.list();
  Student stu = (Student)list.get(0);
  或者:
  Criteria criertia = session.createCriteria(Student.class);
  criteria.add(Restrictions.like("name", "t",MatchMode.START));
  List list = criteria.list();
  Student stu = (Student)list.get(0);
  查询学生姓名在Bill,Jack和Tom之间所有的Student对象
  String[] names = {"Bill","Jack","Tom"};
  Criteria criertia = session.createCriteria(Student.class);
  criteria.add(Restrictions.in("name", names));
  List list = criteria.list();
  Student stu = (Student)list.get(0);
  查询学生年龄(age)等于22或为空(null)的所有学生对象
  Criteria criertia = session.createCriteria(Student.class);
  criteria.add(Restrictions.eq("age", new Integer(22)));
  criteria.add(Restrictions.isNull("age"));
  List list = criteria.list();
  Student stu = (Student)list.get(0);
  查询学生姓名以字母F开头的所有Student对象,并按姓名升序排序
  Criteria criertia = session.createCriteria(Student.class);
  criteria.add(Restrictions.like("name", "F%"));
  criteria.addOrder(Order.asc("name"));
  List list = criteria.list();
  Student stu = (Student)list.get(0);
  注意调用Order.asc的方法应该是Criteria.addOrder()方法。
  连接限制
  Criteria查询中使用FetchMode来实现连接限制。在HQL语句中,可以通过fetch关键字来表示预先抓取(Eager fetching),如下:
  from Group g
  left join fetch g.students s
  where g.name like '%2005'
  可以使用Criteria的API完成同样的功能,如下:
  Criteria criertia = session.createCriteria(Group.class);
  criteria.setFetchMode("students", FetchMode.EAGER);
  criteria.add(Restrictions.like("name", "2005",MatchMode.END));
  List list = criteria.list();
页: [1]
查看完整版本: JAVA基础:Hibernate数据查询(3)