`
hjy2099
  • 浏览: 262737 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

DetachedCriteria例子

阅读更多

首先这是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里是不是违反了面向对象的思想呢?我不喜欢这么设计

 

转自:http://www.iteye.com/problems/5628

分享到:
评论

相关推荐

    Hibernate 使用DetachedCriteria操作

    这个例子中,我们创建了一个针对`User`类的查询,筛选出username为"testUser"的用户,并按照`createTime`字段升序排列。 **5. DetachedCriteria 结合Session执行** DetachedCriteria实例不直接与数据库交互,而是...

    hibernate 例子及一些数据配置例子

    - Criteria API提供了一种更面向对象的查询方式,通过Criteria、DetachedCriteria构建查询条件。 - Query API允许执行原生SQL查询,并通过结果集转换为Java对象。 6. **缓存机制** - Hibernate支持一级缓存...

    hibernate_criterion.rar

    在这个例子中,我们创建了两个条件,然后使用`Restrictions.and()`方法将它们组合成一个"年龄大于等于18且状态为active"的查询条件。 最后,我们来谈谈Criterion的性能。由于Hibernate会将Criterion转换为SQL语句...

    java导出excel的详细例子

    ### Java导出Excel的详细例子 #### 背景与目的 在许多业务场景中,我们需要将数据库中的数据导出到Excel文件中,方便进行数据分析、报表制作等操作。Java作为一种广泛使用的编程语言,在处理此类任务时具有强大的...

    Hibernate 查询经典练习题

    通过上述例子,我们可以看到HQL更接近SQL语法,而Criteria API提供了一个更面向对象的API,两者在处理不同查询场景时各有优势。在实际开发中,开发者可以根据项目需求和团队习惯选择合适的查询方式。

    hibernate查询方法

    DetachedCriteria criteria = DetachedCriteria.forClass(User.class); criteria.add(Restrictions.eq("username", "testUser")); List&lt;User&gt; users = session.createCriteria(User.class).add(Subqueries.property...

    hibernate查询详解

    本文将详细介绍Hibernate的五种查询方式,包括HQL查询、Criteria方法、动态查询DetachedCriteria、例子查询、SQL查询以及命名查询,以满足不同场景下的需求。 1. HQL查询: Hibernate Query Language(HQL)是一种...

    Criteria.pdf

    相比之下,`DetachedCriteria`是一种独立于`Session`的查询对象,可以在没有活跃`Session`的情况下创建和配置,然后在稍后的某个时刻与`Session`关联执行查询。 #### Criteria与DetachedCriteria的区别 - **创建...

    Hibernate教程21_HIbernate查询

    DetachedCriteria criteria = DetachedCriteria.forClass(User.class); criteria.add(Restrictions.eq("username", "test")); List&lt;User&gt; users = session.createCriteria(User.class).add(Subqueries.propertyIn(...

    六种方式实现hibernate查询

    例子查询 示例查询是一种简单的查询方式,使用Hibernate的Session对象直接执行SQL语句。示例代码: ```java static void query(String name){ Session s=null; try{ s=HibernateUtil.getSession(); String sql=...

    Hibernate 在查询操作中要使用分页+命名参数+排序技术

    DetachedCriteria criteria = DetachedCriteria.forClass(Blog.class); criteria.add(Restrictions.eq("blogger.id", bloggerId)); criteria.addOrder(Order.asc("postTime")); List&lt;Blog&gt; blogs = session....

    hibernate-sample:示例 Hibernate 项目以显示 Exists 子句的用法

    使用 Hibernate Criteria && DetachedCriteria Queries演示Exists Clause非常简单的项目 安装 git clone https://github.com/RameshRM/hibernate-sample.git 跑步 mvn install 这是一个maven项目,依赖项是 ...

    Hibernate

    8. ** Criteria与DetachedCriteria**:理解Criteria API的使用,以及DetachedCriteria的概念,用于离线查询或预编译查询。 9. **关联映射**:一对一、一对多、多对一和多对多关联的配置与操作,包括懒加载和立即...

    Hibernate查询方式代码示例

    DetachedCriteria criteria = DetachedCriteria.forClass(Student.class); criteria.add(Restrictions.gt("age", 20)); List&lt;Student&gt; students = criteria.getExecutableCriteria(session).list(); ``` 5. **...

    Hibernat 使用Criteria查询多对多关系(SET集合)条件

    根据题目中的例子,我们有两个实体类`MainClass`和`SubClass`,它们之间存在多对多关系,并通过一个中间表进行关联。每个`MainClass`对象可以拥有多个`SubClass`对象,反之亦然。这种多对多的关系通常通过一个额外的...

    java知识点,面试题总结

    - Criteria查询:使用Criteria、DetachedCriteria构建查询条件,可以添加限制、排序、分页等。 - 查询缓存:提高查询效率,分为一级缓存(Session缓存)和二级缓存(SessionFactory缓存)。 4. Hibernate面试题...

    Hibernat使用原生的SQL

    3. **Criteria API与DetachedCriteria**: 虽然不是直接的SQL,但Criteria API允许构建复杂的查询,最终也可以生成原生SQL。对于不直接使用SQL字符串,但需要灵活构造查询的场景非常有用。 4. **Named Native ...

    09 Criteria查询方式

    Criteria API还可以与其他查询方式结合使用,比如DetachedCriteria,用于创建可延迟执行的查询,或者与Projection一起使用,获取特定字段的结果,而不仅仅是完整的实体对象。 总的来说,"09 Criteria查询方式"这个...

    Hibernate学习笔记(2)

    HQL支持命名参数和位置参数,例如上面的例子展示了如何通过`createQuery()`创建HQL查询,并使用`setParameter()`或`setParameterList()`设置参数。`uniqueResult()`用于获取单个结果,`list()`则用于获取结果集。 3...

    Hibernate 参考实例

    通过Criteria、DetachedCriteria等接口,我们可以构建灵活的查询条件,而无需预先写好查询语句。 7. ** Criteria API 的子查询**: Criteria API 支持子查询,可以嵌套在主查询中,用于实现更复杂的逻辑,例如:找到...

Global site tag (gtag.js) - Google Analytics