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 API中,模糊查询主要通过`Restrictions.like()`方法来实现。该方法接受两个参数:字段名和包含通配符的字符串。 ##### 示例1:单字段模糊查询 ```java // 查找名字中包含“Erica”的用户 ...
本文将深入探讨如何在Hibernate中进行分页查询的封装,并提供相关的源码和工具使用方法。 首先,我们需要了解Hibernate中的Criteria查询,这是实现分页查询的一种方式。Criteria API允许我们以面向对象的方式构建...
2. **查询方法封装**:在Hibernate中,查询通常通过Criteria、HQL(Hibernate Query Language)或JPA的Criteria API来实现。封装查询方法意味着将这些查询逻辑集中管理,提高代码复用性和可读性,同时降低维护成本。...
创建一个DAO接口,定义所有需要的方法,然后创建一个实现该接口的类,如`UserDaoImpl`,在这个实现类中使用Hibernate API完成实际的数据库操作。 5. **泛型DAO**: 为了进一步提高代码的复用性,可以使用泛型来...
在实际开发中,为了提高代码的复用性和可维护性,我们通常会封装一个通用的分页查询方法。这个方法接受实体类、查询条件、排序方式、当前页和每页大小作为参数,返回分页结果。这种方法可以降低代码冗余,提升开发...
公共查询类在Hibernate应用中起着关键作用,它封装了常见的查询操作,提高代码的复用性,降低代码冗余。 1. **配置Hibernate**:在使用Hibernate之前,我们需要进行基本的配置,包括创建`hibernate.cfg.xml`配置...
Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者使用面向对象的方式来操作数据库,极大地简化了数据访问层的编程工作。这个压缩包包含了Hibernate的基础jar包,这些jar文件是开发Hibernate应用所...
为了解决这些问题,Spring框架提供了一个称为HibernateTemplate的类,它是对Hibernate API的一个封装,旨在提高开发效率和代码的可维护性。 **一、HibernateTemplate介绍** HibernateTemplate是Spring框架的一个...
总的来说,SpringSide的Hibernate封装是面向实际开发需求的一套解决方案,它不仅简化了DAO层的编写,也提升了代码质量,降低了维护成本,是Spring和Hibernate集成项目中的一个优秀实践。对于开发者来说,理解并熟练...
- **使用场景**:`Criteria` 适用于即时查询,而 `DetachedCriteria` 更适合跨层传递查询条件。 - **灵活性**:`DetachedCriteria` 提供了更大的灵活性,可以在不同层之间传递而不会丢失查询状态。 #### 三、`...
在这些场景中,我们可以使用Hibernate分页封装来提高查询效率和减少数据传输量。 Hibernate分页封装是一种非常实用的解决方案,可以满足各种需要分页的需求。但是,我们需要注意,Hibernate分页封装需要与实际业务...
Criteria API是Hibernate提供的另一种查询方式,它提供了更加面向对象的API,可以动态构建查询条件。下面是一个使用Criteria API的例子: ```java Session session = sessionFactory.openSession(); Criteria ...
在"Struts+Hibernate分页及条件查询练习"这个项目中,开发者可能采用了以下步骤: 1. **配置Struts和Hibernate**:首先,需要在项目中引入Struts和Hibernate的相关库,配置Struts的struts-config.xml文件和...
项目中实现了分页功能,可能通过在Hibernate查询中添加限制条件(如`setFirstResult()`和`setMaxResults()`)或者使用`Criteria` API的`setFirstResult()`和`setMaxResults()`来实现。这使得用户可以按需加载数据,...
"09 Criteria查询方式"这个主题,显然是围绕Hibernate中的Criteria API展开的,这是一种灵活且类型安全的查询机制,用于在Java代码中构建SQL查询。Criteria API提供了一种面向对象的方式来查询数据库,避免了直接...
条件查询在Hibernate中可以通过Criteria API或HQL(Hibernate Query Language)实现。例如,我们可以创建一个Criteria实例,设置条件(如username等于用户输入),然后调用list()方法获取结果集。HQL则允许我们写更...
在Hibernate中,`Criteria`对象代表了一个SQL查询的构建块,而`Expression`对象则用于构建查询条件。下面我们将详细介绍`Expression`对象的常用方法及其在构建查询时的应用。 1. `Expression.eq(String property...
- **条件查询**: ```java Query query = session.createQuery("from User as user where user.name=? and user.pw=?"); query.setString(0, name); query.setString(1, pw); ``` - **分页查询**: ```java ...