|
Criteria查询
Hibernate中的Criteria API提供了另一种查询持久化的方法。它让你能够使用简单的API动态的构建查询,它灵活的特性通常用于搜索条件的数量可变的情况。
Criteria查询之所以灵活是因为它可以借助Java语言,在Java的帮助下它拥有超越HQL的功能。Criteria查询也是Hibernate竭力推荐的一种面向对象的查询方式。
Criteria查询的缺点在于只能检索完整的对象,不支持统计函数,它本身的API也抬高了一定的学习坡度。
Criteria查询示例代码
Session session=HibernateUtil.getSession();Criteria criteria=session.createCriteria(User.class); // 条件一:名称以关开头criteria.add(Restrictions.like("name", "关%"));// 条件二:email出现在数组中String[] arr={"1@2.3","2@2.3","3@2.3"};criteria.add(Restrictions.in("email", arr));// 条件三:password等于一criteria.add(Restrictions.eq("password", "1"));// 排序条件:按登录时间升序criteria.addOrder(Order.asc("lastLoginTime"));List<User> users=(List<User>)criteria.list();System.out.println("返回的User实例数为"+users.size());for(User user:users){System.out.println(user);} HibernateUtil.closeSession(session);
Criteria查询实际产生的SQL语句
select this_.ID as ID0_0_, this_.name as name0_0_, this_.pswd as pswd0_0_, this_.email as email0_0_, this_.lastLoginTime as lastLogi5_0_0_, this_.lastLoginIp as lastLogi6_0_0_ from USERTABLE_OKB this_ where this_.name like '关%' and this_.email in ( '1@2.3', '2@2.3', '3@2.3' ) and this_.pswd='1'order by this_.lastLoginTime as
c
注:参数是手工加上的。 |
|