0 0

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个答案 按时间排序 按投票排序

0 0

采纳的答案

首先这是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
0 0

看了一下,发现这个Service里的方法写的是够烂的,我来解释一下。
这个方式其实是一个多条件查询,用户不填写的话,代表忽略此条件。所以做了N次if判断

2008年10月23日 23:39

相关推荐

    Criteria的完整用法.pdf

    List&lt;Cat&gt; whiteCats = getHibernateTemplate().findByCriteria(detachedCriteria); ``` #### 四、小结 Hibernate的Criteria API通过其丰富的特性和灵活性,为开发者提供了构建复杂查询的强大工具。通过理解并...

    Hibernate中Criteria的完整用法

    List&lt;User&gt; results = getHibernateTemplate().findByCriteria(detachedCriteria); ``` 理解并熟练运用Hibernate的Criteria API,可以帮助开发者更有效地构建动态和复杂的查询,同时保持代码的整洁和可读性。在...

    Criteria详解

    2. **使用DetachedCriteria:** 当需要执行查询时,可以通过`getHibernateTemplate().findByCriteria`方法来使用这个`DetachedCriteria`实例。 ```java List&lt;Cat&gt; cats = getHibernateTemplate().findByCriteria...

    Hibernate中Criteria的完整用法.docx

    List&lt;User&gt; users = getHibernateTemplate().findByCriteria(criteria); ``` ##### 4. 复杂查询示例 ```java Criteria crit = sess.createCriteria(Order.class); crit.createAlias("orderItems", "oi"); crit.add...

    DetachedCriteria查询

    `List results = getHibernateTemplate().findByCriteria(criteria);` `int count = ((Integer) results.get(0)).intValue();` 查询不重复的数据 可以使用 `setProjection()` 方法设置查询结果的投影,例如: `...

    DetachedCriteria Criteria 使用方法

    ### DetachedCriteria 使用详解 #### 一、背景与概述 在Web开发中,经常会遇到需要根据用户提供的条件进行动态查询的需求。例如,在社交平台中,用户可以设置多种筛选条件来进行高级搜索,这时就需要动态生成SQL...

    hibernate-Criteria

    List&lt;Cat&gt; cats = getHibernateTemplate().findByCriteria(detachedCriteria); ``` ##### 2. Projection 除了基本的查询之外,`Criteria`还支持`Projection`,即可以选择特定的列进行查询。例如,可以计算所有猫的...

    Criteria使用方法

    List&lt;Cat&gt; cats = getHibernateTemplate().findByCriteria(criteria); ``` #### 三、Criterion与Projection **1. Criterion** - **定义**:`Criterion`是`Criteria`的查询条件。它定义了查询的具体条件,如等于、...

    SpringData数据层全栈方案高级应用Java代码.zip

    这在处理复杂或灵活的查询需求时非常有用,比如`findByCriteria(Criteria criteria)`。 6. **分页与排序**: 在处理大数据量时,SpringData提供了分页和排序功能。只需在查询方法中添加Pageable参数,即可实现分页...

    Hibernate的Criteria用法总结

    userList = getHibernateTemplate().findByCriteria(detachedCriteria); ``` Criteria API的优势在于其灵活性,可以根据业务需求动态构建查询,同时减少了硬编码SQL,提高了代码的可读性和可维护性。然而,对于...

    基于SpringJDBC的轻量级ORM框架sborm.zip

    1、hibernate:过于臃肿,使用不够灵活,优化难(其实主要是因为很少用),HQL感觉就是个渣,在 mysql几乎一统天下的背景下,跨数据库级别的兼容吃力不讨好。Hibernate的对象化关联处理确实挺强大,但是使用起来坑太...

    struts+hibernate写的留言板小程序

    - **查询分页数据**:`leaveList = us.findByCriteria(criteria, paginate.getCurrentLimitStart(), paginate.getPageSize());` ##### 3. ILeaveDAO接口 ILeaveDAO接口定义了数据访问层的基本方法,如添加、删除、...

    Hibernate - DetachedCriteria 的完整用法

    使用 DetachedCriteria 可以很方便地根据查询条件来返回查询结果,Spring 框架提供了 `getHibernateTemplate().findByCriteria(detachedCriteria)` 方法来实现这一点。 Criteria 和 DetachedCriteria 均可使用 ...

    本人写的Hibernate超级通用DAO

    5. **事务管理**:为了确保数据的一致性,通用DAO应该包含事务管理。可以使用Spring的TransactionTemplate或AOP进行事务的声明式管理。 6. **异常处理**:统一处理Hibernate的异常,比如转换成更友好的业务异常,以...

    Hibernate中Criteria的用法详解

    在Spring框架中,HibernateTemplate提供了一种方便的方式来执行DetachedCriteria查询,通过getHibernateTemplate().findByCriteria(detachedCriteria)方法,可以轻松地根据DetachedCriteria实例执行查询并获取结果。...

    Castle ActiveRecord 最全的入门CHM帮助文档

    6. **查询与检索**:除了基本的 CRUD 操作,Castle ActiveRecord 提供了多种查询方式,如 FindAll()、FindByCriteria() 和 FindOne(),以及 Linq 支持。这使得根据各种条件查找和筛选数据变得简单。 7. **事务处理*...

    spring hibernate 泛型DAO

    在这个例子中,`findByCriteria`方法接受一个Criteria对象作为参数,而`findByExample`方法使用了Example对象来构造查询,根据实体类对象的属性匹配数据库中的记录。 总结起来,"Spring Hibernate 泛型DAO"的主题...

    hibernate公共查询

    - `findByCriteria(Criteria criteria)`: 使用`Criteria API`自定义复杂查询,可以根据属性、关联、限制条件等构建灵活的查询。 - `findByNamedQuery(queryName, params)`: 使用预定义的命名查询,这些查询可以在...

Global site tag (gtag.js) - Google Analytics