和风细雨

世上本无难事,心以为难,斯乃真难。苟不存一难之见于心,则运用之术自出。

Hibernate之 Criteria查询

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 asc

注:参数是手工加上的。

posted on 2008-04-30 17:21 和风细雨 阅读(1658) 评论(0)  编辑  收藏 所属分类: Hibernate


只有注册用户登录后才能发表评论。


网站导航: