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

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;

你可能感兴趣的:(Hibernate)