当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
JAVA基础:Hibernate数据查询(3)
发布时间:2012/4/28 16:25:28 来源:城市网学院 编辑:ziteng
  for(int i = 0 ; i < list.size(); i++)
  {
  obj = (Object[])list.get(i);
  group = (Group)obj[0];//group是数组是第一个对象
  stu = (Student)obj[1];//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,<
  Restrictions.lt():less-than,<
  Restrictions.le:less-equal,<=
  Restrictions.between():对应SQL的between子句。
  Restrictions.like():对应SQL的like子句。
  Restrictions.in():对应SQL的in子句。
  Restrictions.and():and 关系。
  Restrictions.or():or 关系。
  Restrictions.isNull():判断属性是否为空,为空返回true,否则返回false。
  Restrictions.isNoyNull():与上面的相反。
  Order.asc():根据传入的字段进行升序排序。
  Order.desc():与上相反
  MatchMode.EXACT:字符串中精确匹配,相当于like 'value'
  MatchMode.ANYWHERE:字符串在中间位置,相当于like'%value%'
  MatchMode.START:字符串在最前面,相当于like'value%'
  MatchMode.END:字符串在最后,相当于like'%value'
  下面是几个查询限制的例子:
  查询学生名字以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();
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved