`
badmanisme
  • 浏览: 32175 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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

    博客分类:
  • java
 
阅读更多
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-Criteria 模糊查询

    在Hibernate的Criteria API中,模糊查询主要通过`Restrictions.like()`方法来实现。该方法接受两个参数:字段名和包含通配符的字符串。 ##### 示例1:单字段模糊查询 ```java // 查找名字中包含“Erica”的用户 ...

    Hibernate中分页查询的封装。

    本文将深入探讨如何在Hibernate中进行分页查询的封装,并提供相关的源码和工具使用方法。 首先,我们需要了解Hibernate中的Criteria查询,这是实现分页查询的一种方式。Criteria API允许我们以面向对象的方式构建...

    小码哥Hibernate封装的查询方法的皮毛介绍共4页.p

    2. **查询方法封装**:在Hibernate中,查询通常通过Criteria、HQL(Hibernate Query Language)或JPA的Criteria API来实现。封装查询方法意味着将这些查询逻辑集中管理,提高代码复用性和可读性,同时降低维护成本。...

    Hibernate封装dao层

    创建一个DAO接口,定义所有需要的方法,然后创建一个实现该接口的类,如`UserDaoImpl`,在这个实现类中使用Hibernate API完成实际的数据库操作。 5. **泛型DAO**: 为了进一步提高代码的复用性,可以使用泛型来...

    通用的hibernate查询

    在实际开发中,为了提高代码的复用性和可维护性,我们通常会封装一个通用的分页查询方法。这个方法接受实体类、查询条件、排序方式、当前页和每页大小作为参数,返回分页结果。这种方法可以降低代码冗余,提升开发...

    hibernate公共查询

    公共查询类在Hibernate应用中起着关键作用,它封装了常见的查询操作,提高代码的复用性,降低代码冗余。 1. **配置Hibernate**:在使用Hibernate之前,我们需要进行基本的配置,包括创建`hibernate.cfg.xml`配置...

    hibernate基础jar包

    Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者使用面向对象的方式来操作数据库,极大地简化了数据访问层的编程工作。这个压缩包包含了Hibernate的基础jar包,这些jar文件是开发Hibernate应用所...

    对hibernate的封装 HibernateTemplate

    为了解决这些问题,Spring框架提供了一个称为HibernateTemplate的类,它是对Hibernate API的一个封装,旨在提高开发效率和代码的可维护性。 **一、HibernateTemplate介绍** HibernateTemplate是Spring框架的一个...

    SpringSide的Hibernate封装

    总的来说,SpringSide的Hibernate封装是面向实际开发需求的一套解决方案,它不仅简化了DAO层的编写,也提升了代码质量,降低了维护成本,是Spring和Hibernate集成项目中的一个优秀实践。对于开发者来说,理解并熟练...

    DetachedCriteria Criteria 使用方法

    - **使用场景**:`Criteria` 适用于即时查询,而 `DetachedCriteria` 更适合跨层传递查询条件。 - **灵活性**:`DetachedCriteria` 提供了更大的灵活性,可以在不同层之间传递而不会丢失查询状态。 #### 三、`...

    Hibernate分页封装

    在这些场景中,我们可以使用Hibernate分页封装来提高查询效率和减少数据传输量。 Hibernate分页封装是一种非常实用的解决方案,可以满足各种需要分页的需求。但是,我们需要注意,Hibernate分页封装需要与实际业务...

    hibernate自定义查询

    Criteria API是Hibernate提供的另一种查询方式,它提供了更加面向对象的API,可以动态构建查询条件。下面是一个使用Criteria API的例子: ```java Session session = sessionFactory.openSession(); Criteria ...

    Struts和Hibernate分页及查询

    在"Struts+Hibernate分页及条件查询练习"这个项目中,开发者可能采用了以下步骤: 1. **配置Struts和Hibernate**:首先,需要在项目中引入Struts和Hibernate的相关库,配置Struts的struts-config.xml文件和...

    spring4+hibernate4 封装BaseDao增删改查以及分页,,支持jdk1.7,不支持jdk1.8

    项目中实现了分页功能,可能通过在Hibernate查询中添加限制条件(如`setFirstResult()`和`setMaxResults()`)或者使用`Criteria` API的`setFirstResult()`和`setMaxResults()`来实现。这使得用户可以按需加载数据,...

    09 Criteria查询方式

    "09 Criteria查询方式"这个主题,显然是围绕Hibernate中的Criteria API展开的,这是一种灵活且类型安全的查询机制,用于在Java代码中构建SQL查询。Criteria API提供了一种面向对象的方式来查询数据库,避免了直接...

    Struts1.0+hibernate3.3登陆条件查询分页简单例子

    条件查询在Hibernate中可以通过Criteria API或HQL(Hibernate Query Language)实现。例如,我们可以创建一个Criteria实例,设置条件(如username等于用户输入),然后调用list()方法获取结果集。HQL则允许我们写更...

    hibernate结构化查询

    在Hibernate中,`Criteria`对象代表了一个SQL查询的构建块,而`Expression`对象则用于构建查询条件。下面我们将详细介绍`Expression`对象的常用方法及其在构建查询时的应用。 1. `Expression.eq(String property...

    Hibernate查询解决方案

    - **条件查询**: ```java Query query = session.createQuery("from User as user where user.name=? and user.pw=?"); query.setString(0, name); query.setString(1, pw); ``` - **分页查询**: ```java ...

Global site tag (gtag.js) - Google Analytics