hibernate中Criteria的用法一查询条件的封装

本文介绍了Hibernate框架下Criteria API的使用方法,包括组装复杂查询条件、排序、分页等功能,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Criteria可以灵活的根据其特点进行查询条件的组装。可以方便地增加多个查询条件,设置排序方式,实现分页功能。


Criterion 是 Criteria 的查询条件。Criteria 提供了 add(Criterion criterion) 方法来 添加查询条件。

Criterion 接口的主要实现包括: Example 、 Junction 和 SimpleExpression 。而Junction 的实际使用是它的两个子类 conjunction 和 disjunction ,分别是使用 AND 和 OR 操作符进行来联结查询条件集合。 Criterion 的实例可以通过 Restrictions 工具类来创建,Restrictions 提供了大量的静态 方法,如 eq (等于)、 ge (大于等于)、 between 等来方法的创建 Criterion 查询条件 。除此之外, Restrictions 还提供了方法来创建 conjunction 和 disjunction 实例,通过往该实例的 add(Criteria) 方法来增加查询条件形成一个查询条件集合 。至于 Example 的创建有所不同, Example 本身提供了一个静态方法 create(Object entity) ,即根据一个对象(实际使用中一般是映射到数据库的对象)来创建。然后可以设置一些 过滤条件:

Example exampleUser =Example.create(u) .ignoreCase() // 忽略大小写

.enableLike(MatchMode.ANYWHERE); // 对 String 类型的属性,相当于 %value%

Project 主要是让 Criteria 能够进行报表查询,并可以实现分组。 Project 主要有SimpleProjection 、 ProjectionList 和 Property 三个实现。其中 SimpleProjection 和ProjectionList 的实例化是由内建的 Projections 来完成,如提供的 avg 、 count 、 max 、min 、 sum 可以让开发者很容易对某个字段进行统计查询。

下面介绍使用方法:

1、首先,引入相关包

import org.hibernate.Criteria;

import org.hibernate.criterion.Property;

2、 创建Criteria 实例

Criteria criteria = session.createCriteria(Usertab.class);

criteria.add(Property.forName("delFlag")

.eq(Byte.parseByte("0")));

3、 增加查询条件。

Property 是对某个字段进行查询条件的设置

criteria.add(Property.forName("delFlag")

.eq(Byte.parseByte("0")));

org.hibernate.criterion.Restrictions类 定义了获得某些内置Criterion类型的工厂方法

criteria.add(Restrictions.like("esn", "%" + esn + "%"));

4、结果集排序,以及设置排序字段。使用org.hibernate.criterion.Order来为查询结果排序。

criteria.addOrder(Property.forName("ename").asc());

5、设置分页

criteria.setFirstResult(start);

criteria.setMaxResults(limit);

完整代码

public List findUserlistByCondition(final String esn, final String ename,

final String usesFlag, final int start, final int limit,

final String sort, final String dir) {

List users = getHibernateTemplate().executeFind(new HibernateCallback() {


public Object doInHibernate(Session session)

throws HibernateException, SQLException {

Criteria criteria = session.createCriteria(Usertab.class);


criteria.add(Property.forName("delFlag")

.eq(Byte.parseByte("0")));


if (!"".equals(esn) && esn != null) {


criteria.add(Restrictions.like("esn", "%" + esn + "%"));

if (!"".equals(ename) && ename != null) {


criteria.add(Restrictions.like("ename", "%" + ename + "%"));

if (!"".equals(usesFlag) && usesFlag != null) {


criteria.add(Property.forName("usesFlag").eq(

Byte.parseByte(usesFlag)));



if (dir.equals("ASC")) {

criteria.addOrder(Property.forName(sort).asc());


else {

criteria.addOrder(Property.forName(sort).desc());


criteria.setFirstResult(start);


criteria.setMaxResults(limit);


return criteria.list();


if(users!=null){

return users;

return null;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值