-
findByCriteria(...)应该怎么用?3
findByCriteria(...)应该怎么用?
public List<T> findByCriteria(Criterion... criterion) {
return createCriteria(criterion).list();
}
这个方法应该怎么用?
比如表结构如下
id pk
money float
type_id fk
按照type_id分组求sum(money) 在dao里应该怎么写?2008年10月21日 15:40
2个答案 按时间排序 按投票排序
-
采纳的答案
首先这是Hibernate的QBC检索方式,建议baidu下QBC,或者看书和API。
下面是我写过的一个项目中的代码片段,这是DAO的片段public List<DispatchTask> findByCriteria(DetachedCriteria criteria) { log.debug("finding DispatchTask instance by criteria"); try { List<DispatchTask> results = getHibernateTemplate().findByCriteria(criteria); log.debug("find by criteria successful, result size: " + results.size()); return results; } catch (RuntimeException re) { log.error("find by criteria failed", re); throw re; } }
这是Service的片段public List<DispatchTask> getByQuery(DispatchTask instance, Date queryTime1, Date queryTime2) { String taskId = instance.getTaskId(); String deptName = instance.getDeptName(); String linkman = instance.getLinkman(); String plateNum = instance.getPlateNum(); Short statusId = instance.getStatusId(); Date queryTime3 = null; if(queryTime2 != null){ queryTime3 = new Date(); queryTime3.setTime(queryTime2.getTime()+(new Long("86400000"))); } DetachedCriteria criteria = DetachedCriteria .forClass(DispatchTask.class); if (taskId != null && taskId != "") { criteria.add(Expression.like("taskId", taskId, MatchMode.ANYWHERE)); } if (deptName != null && deptName != "") { criteria.add(Expression.like("deptName", deptName, MatchMode.ANYWHERE)); } if (linkman != null && linkman != "") { criteria.add(Expression .like("linkman", linkman, MatchMode.ANYWHERE)); } if (plateNum != null && plateNum != "") { criteria.add(Expression.like("plateNum", plateNum, MatchMode.ANYWHERE)); } if (statusId != null && statusId != 999) { criteria.add(Expression.eq("statusId", statusId)); } if (queryTime1 != null) { if(queryTime2 != null){ if(queryTime1.getTime() <= queryTime2.getTime()){ criteria.add(Expression.between("dispatchDate", queryTime1, queryTime3)); } }else{ criteria.add(Expression.ge("dispatchDate", queryTime1)); } }else{ if(queryTime2 != null){ criteria.add(Expression.le("dispatchDate", queryTime3)); } } return dispatchTaskDAO.findByCriteria(criteria); }
关键是给出规则,即Criterion,DetachedCriteria是继承它的。这个找个Hibernate的API就了解了。
至于您说的例子,DAO就是DatabaseAccessObject,我觉得您把逻辑放进DAO里是不是违反了面向对象的思想呢?我不喜欢这么设计2008年10月23日 23:35
-
看了一下,发现这个Service里的方法写的是够烂的,我来解释一下。
这个方式其实是一个多条件查询,用户不填写的话,代表忽略此条件。所以做了N次if判断2008年10月23日 23:39
相关推荐
List<Cat> whiteCats = getHibernateTemplate().findByCriteria(detachedCriteria); ``` #### 四、小结 Hibernate的Criteria API通过其丰富的特性和灵活性,为开发者提供了构建复杂查询的强大工具。通过理解并...
List<User> results = getHibernateTemplate().findByCriteria(detachedCriteria); ``` 理解并熟练运用Hibernate的Criteria API,可以帮助开发者更有效地构建动态和复杂的查询,同时保持代码的整洁和可读性。在...
2. **使用DetachedCriteria:** 当需要执行查询时,可以通过`getHibernateTemplate().findByCriteria`方法来使用这个`DetachedCriteria`实例。 ```java List<Cat> cats = getHibernateTemplate().findByCriteria...
List<User> users = getHibernateTemplate().findByCriteria(criteria); ``` ##### 4. 复杂查询示例 ```java Criteria crit = sess.createCriteria(Order.class); crit.createAlias("orderItems", "oi"); crit.add...
`List results = getHibernateTemplate().findByCriteria(criteria);` `int count = ((Integer) results.get(0)).intValue();` 查询不重复的数据 可以使用 `setProjection()` 方法设置查询结果的投影,例如: `...
### DetachedCriteria 使用详解 #### 一、背景与概述 在Web开发中,经常会遇到需要根据用户提供的条件进行动态查询的需求。例如,在社交平台中,用户可以设置多种筛选条件来进行高级搜索,这时就需要动态生成SQL...
List<Cat> cats = getHibernateTemplate().findByCriteria(detachedCriteria); ``` ##### 2. Projection 除了基本的查询之外,`Criteria`还支持`Projection`,即可以选择特定的列进行查询。例如,可以计算所有猫的...
List<Cat> cats = getHibernateTemplate().findByCriteria(criteria); ``` #### 三、Criterion与Projection **1. Criterion** - **定义**:`Criterion`是`Criteria`的查询条件。它定义了查询的具体条件,如等于、...
这在处理复杂或灵活的查询需求时非常有用,比如`findByCriteria(Criteria criteria)`。 6. **分页与排序**: 在处理大数据量时,SpringData提供了分页和排序功能。只需在查询方法中添加Pageable参数,即可实现分页...
userList = getHibernateTemplate().findByCriteria(detachedCriteria); ``` Criteria API的优势在于其灵活性,可以根据业务需求动态构建查询,同时减少了硬编码SQL,提高了代码的可读性和可维护性。然而,对于...
1、hibernate:过于臃肿,使用不够灵活,优化难(其实主要是因为很少用),HQL感觉就是个渣,在 mysql几乎一统天下的背景下,跨数据库级别的兼容吃力不讨好。Hibernate的对象化关联处理确实挺强大,但是使用起来坑太...
- **查询分页数据**:`leaveList = us.findByCriteria(criteria, paginate.getCurrentLimitStart(), paginate.getPageSize());` ##### 3. ILeaveDAO接口 ILeaveDAO接口定义了数据访问层的基本方法,如添加、删除、...
使用 DetachedCriteria 可以很方便地根据查询条件来返回查询结果,Spring 框架提供了 `getHibernateTemplate().findByCriteria(detachedCriteria)` 方法来实现这一点。 Criteria 和 DetachedCriteria 均可使用 ...
5. **事务管理**:为了确保数据的一致性,通用DAO应该包含事务管理。可以使用Spring的TransactionTemplate或AOP进行事务的声明式管理。 6. **异常处理**:统一处理Hibernate的异常,比如转换成更友好的业务异常,以...
在Spring框架中,HibernateTemplate提供了一种方便的方式来执行DetachedCriteria查询,通过getHibernateTemplate().findByCriteria(detachedCriteria)方法,可以轻松地根据DetachedCriteria实例执行查询并获取结果。...
6. **查询与检索**:除了基本的 CRUD 操作,Castle ActiveRecord 提供了多种查询方式,如 FindAll()、FindByCriteria() 和 FindOne(),以及 Linq 支持。这使得根据各种条件查找和筛选数据变得简单。 7. **事务处理*...
在这个例子中,`findByCriteria`方法接受一个Criteria对象作为参数,而`findByExample`方法使用了Example对象来构造查询,根据实体类对象的属性匹配数据库中的记录。 总结起来,"Spring Hibernate 泛型DAO"的主题...
- `findByCriteria(Criteria criteria)`: 使用`Criteria API`自定义复杂查询,可以根据属性、关联、限制条件等构建灵活的查询。 - `findByNamedQuery(queryName, params)`: 使用预定义的命名查询,这些查询可以在...