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;
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;