Hibernate使用Criteria查询

Hibernate使用Criteria查询

Hibernate属于ORMapping映射框架,所有的操作都应该以对象为主进行使用,那么Query的使用就不符合与这种要求了,所以在查询的基础上又扩充了一个基于对象模式的查询接口:Criteria接口,而这个接口的创建依靠Session接口:

public Criteria createCriteria(Class persistentClass);

【范例】查询全部数据

import com.gub.dbc.HibernateSessionFactory;
import com.gub.vo.Dept;
import org.hibernate.Criteria;

import java.util.Iterator;

public class CriteriaDemoA {
    public static void main(String[] args) {
        Criteria criteria = HibernateSessionFactory.getSession().createCriteria(Dept.class);
        Iterator<Dept> iter = criteria.list().iterator();
        while(iter.hasNext()){
            System.out.println(iter.next());
        }
        HibernateSessionFactory.closeSession();
    }
}

如果只进行这种简单的查询,那么Criteria接口一定比Query接口方便,但在实际开发中,虽然需要查询全部,但很多时候需要限定查询,所以在Criteria接口里面也支持查询条件的设置,此接口定义了如下增加查询条件的方法:

public Criteria add(Criterion criterion);

这个时候对于所有条件的创建还需要使用另外一个类:org.hibernate.criterion.Restrictions,其定义了如下的操作方法:

  • 逻辑运算
方法描述
public static Conjunction and(Criterion…predicates)逻辑与运算(AND)
public static Disjunction or(Criterion…predicates)逻辑或运算(OR)
public static Criterion not(Criterion…expression)逻辑非运算(NOT)
  • 关系运算
方法描述
public static SimpleExpression eq(String propertyName,Object value)等于("==")
public static SimpleExpression ne(String propertyName,Object value)不等于("!=")
public static SimpleExpression gt(String propertyName,Object value)大于(">")
public static SimpleExpression ge(String propertyName,Object value)大于等于(">=")
public static SimpleExpression lt(String propertyName,Object value)小于("<")
public static SimpleExpression le(String propertyName,Object value)小于等于("<=")
public static SimpleExpression like(String propertyName,Object value)模糊查询(“LIKE”)
public static Criterion in(String propertyName,Collection values)分页查询(“IN”)
public static Criterion between(String propertyName,Object lo,Object hi)(“BEWTEEN”)
public static Criterion isNull(String propertyName)是否为空(“IS NULL”)
public static Criterion isNotNull(String propertyName)是否非空(“IS NOT NULL”)

【范例】根据ID查询

import com.gub.dbc.HibernateSessionFactory;
import com.gub.vo.Dept;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import java.util.Iterator;

public class CriteriaDemoB {
    public static void main(String[] args) {
        Criteria criteria = HibernateSessionFactory.getSession().createCriteria(Dept.class);
        criteria.add(Restrictions.eq("deptno",3));
        Iterator<Dept> iter = criteria.list().iterator();
        while(iter.hasNext()){
            System.out.println(iter.next());
        }
        HibernateSessionFactory.closeSession();
    }
}

在整个Criteria操作之中,最有用处的操作是IN操作,因为这个接口的IN操作可以直接将要查询的数据以Collection形式保存。
【范例】使用IN查询

import com.gub.dbc.HibernateSessionFactory;
import com.gub.vo.Dept;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class CriteriaDemoC {
    public static void main(String[] args) {
        Set<Integer> deptnos = new HashSet<Integer>();
        deptnos.add(1);
        deptnos.add(3);
        Criteria criteria = HibernateSessionFactory.getSession().createCriteria(Dept.class);
        criteria.add(Restrictions.in("deptno",deptnos));
        Iterator<Dept> iter = criteria.list().iterator();
        while(iter.hasNext()){
            System.out.println(iter.next());
        }
        HibernateSessionFactory.closeSession();
    }
}

【范例】多条件查询

import com.gub.dbc.HibernateSessionFactory;
import com.gub.vo.Dept;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import java.util.Iterator;

public class CriteriaDemoD {
    public static void main(String[] args) {
        Criteria criteria = HibernateSessionFactory.getSession().createCriteria(Dept.class);
        criteria.add(Restrictions.and(Restrictions.gt("deptno",1),Restrictions.like("dname","%人%")));
        Iterator<Dept> iter = criteria.list().iterator();
        while(iter.hasNext()){
            System.out.println(iter.next());
        }
        HibernateSessionFactory.closeSession();
    }
}

在使用Criteria接口操作的时候还可以设置排序,里面提供了排序的方法:public Criteria addOrder(Order order)

  • 升序排列:public static Order asc(String propertyName);
  • 降序排列:public static Order dasc(String propertyName);

【范例】排序

import com.gub.dbc.HibernateSessionFactory;
import com.gub.vo.Dept;
import org.hibernate.Criteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import java.util.Iterator;

public class CriteriaDemoE {
    public static void main(String[] args) {
        Criteria criteria = HibernateSessionFactory.getSession().createCriteria(Dept.class);
        criteria.addOrder(Order.desc("deptno"));
        Iterator<Dept> iter = criteria.list().iterator();
        while(iter.hasNext()){
            System.out.println(iter.next());
        }
        HibernateSessionFactory.closeSession();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值