一.Criteria简介
Criteria是一个完全面向对象,可扩展的条件查询API,通过它完全不需要考虑数据库底层如果和实现,以及SQL语句如何编写,它是Hibernate框架的核心查询对象。Criteria查询,又称QBC查(Queryby Criteria),它是Hibernate的另一个对象检索方式。
org.hibernate.criterion.Criteria 是Hibernate提供的一个面向对象的查询接口条件接口,一个单独的查询就是Criteria接口的一个实例,用于限制Criteria对象的查询,在Hibernate中Criteria对象的
创建通常是由Restrictions工厂类来完成的,它提供了条件查询方法。
二.Criteria对象常用方法
- list()方法:该方法用于返回多条查询结果
- uniqueResult()方法:该方法用于返回唯一的结果,在确保只有一条记录的查询是可以使用该方法。
- executeUpdate()方法:该方法是Hibernate3的新特性,它支持HQL语句的更新和删除操作。
- setFirstResult()方法:该方法可以设置获取第一个记录的位置,也就是它表示从第几行记录开始查询,默认从0开始计算。
- setMaxResult()方法:该方法用于设置结果集的最大记录,通常与setFirstRseult()方法结合使用,用于限制结果集的范围,以实现分页功能。
三.Criteria使用步骤
1、获取Hibernate的Session对象
2、通过Session对象获取Criteria。
3、使用Restrictions的静态方法创建Criterion条件对象,Restrictions类中提供了一系列的查询条件 方法,这些静态方法都返回Criterion实例,每个Criterion实例代表一个条件查询。
4、向Criteria对象中添加Criterion查询条件。Criteria的add()方法用于加入查询条件。
5、执行Criteria对象list()方法或uniqueResult()获得结果。
Restrictions 查询用法
HQL运算符 | QBC运算符 | 含义 |
---|---|---|
= | Restrictions.eq() | 等于equal |
<> | Restrictions.ne() | 不等于not equal |
> | Restrictions.gt() | 大于greater than |
>= | Restrictions.ge() | 大于等于greater than or equal |
< | Restrictions.lt() | 小于less than |
<= | Restrictions.le() | 小于等于less than or equal |
is null | Restrictions.isnull() | 等于空值 |
is not null | Restrictions.isNotNull() | 非空值 |
like | Restrictions.like() | 字符串模式匹配 |
or | Restrictions.or() | 逻辑或 |
not | Restrictions.not() | 逻辑非 |
in(列表) | Restrictions.in() | 等于列表中的某一个值 |
not in(列表) | Restrictions.not(Restrictions.in()) | 不等于列表中任意一个值 |
条件查询:
//获取session对象
Session session = HibernateUtil.getCurrentSession();
//获取事务对象
Transaction tx = session.beginTransaction();
/*
* Session对象的createCriteria方法用于创建Criteria对象,
* 方法的参数为与表映射过的实体类
*/
Criteria criteria = session.createCriteria(Person.class);
/*
* Restrictions类用于设置查询条件
* criteria对象的add方法用于添加查询条件方法的参数为Restrictions类
*/
criteria.add(Restrictions.eq("name", "林某1"));
//执行查询
Person person = (Person) criteria.uniqueResult()
分页查询:
//获取session对象
Session session = HibernateUtil.getCurrentSession();
//获取事务对象
Transaction tx = session.beginTransaction();
/*
*通过Session对象的createCriteria()方法来创建Criteria对象,
*createCriteria()方法里的里的参数为要查询的ORM实体类
*/
Criteria criteria = session.createCriteria(Person.class);
//设置起始查询索引
criteria.setFirstResult(0);
//设置结束索引
criteria.setMaxResults(3);
//执行查询
List<Person> list = criteria.list();