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,
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]