首先这是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
分享到:
相关推荐
这个例子中,我们创建了一个针对`User`类的查询,筛选出username为"testUser"的用户,并按照`createTime`字段升序排列。 **5. DetachedCriteria 结合Session执行** DetachedCriteria实例不直接与数据库交互,而是...
- Criteria API提供了一种更面向对象的查询方式,通过Criteria、DetachedCriteria构建查询条件。 - Query API允许执行原生SQL查询,并通过结果集转换为Java对象。 6. **缓存机制** - Hibernate支持一级缓存...
在这个例子中,我们创建了两个条件,然后使用`Restrictions.and()`方法将它们组合成一个"年龄大于等于18且状态为active"的查询条件。 最后,我们来谈谈Criterion的性能。由于Hibernate会将Criterion转换为SQL语句...
### Java导出Excel的详细例子 #### 背景与目的 在许多业务场景中,我们需要将数据库中的数据导出到Excel文件中,方便进行数据分析、报表制作等操作。Java作为一种广泛使用的编程语言,在处理此类任务时具有强大的...
通过上述例子,我们可以看到HQL更接近SQL语法,而Criteria API提供了一个更面向对象的API,两者在处理不同查询场景时各有优势。在实际开发中,开发者可以根据项目需求和团队习惯选择合适的查询方式。
DetachedCriteria criteria = DetachedCriteria.forClass(User.class); criteria.add(Restrictions.eq("username", "testUser")); List<User> users = session.createCriteria(User.class).add(Subqueries.property...
本文将详细介绍Hibernate的五种查询方式,包括HQL查询、Criteria方法、动态查询DetachedCriteria、例子查询、SQL查询以及命名查询,以满足不同场景下的需求。 1. HQL查询: Hibernate Query Language(HQL)是一种...
相比之下,`DetachedCriteria`是一种独立于`Session`的查询对象,可以在没有活跃`Session`的情况下创建和配置,然后在稍后的某个时刻与`Session`关联执行查询。 #### Criteria与DetachedCriteria的区别 - **创建...
DetachedCriteria criteria = DetachedCriteria.forClass(User.class); criteria.add(Restrictions.eq("username", "test")); List<User> users = session.createCriteria(User.class).add(Subqueries.propertyIn(...
例子查询 示例查询是一种简单的查询方式,使用Hibernate的Session对象直接执行SQL语句。示例代码: ```java static void query(String name){ Session s=null; try{ s=HibernateUtil.getSession(); String sql=...
DetachedCriteria criteria = DetachedCriteria.forClass(Blog.class); criteria.add(Restrictions.eq("blogger.id", bloggerId)); criteria.addOrder(Order.asc("postTime")); List<Blog> blogs = session....
使用 Hibernate Criteria && DetachedCriteria Queries演示Exists Clause非常简单的项目 安装 git clone https://github.com/RameshRM/hibernate-sample.git 跑步 mvn install 这是一个maven项目,依赖项是 ...
8. ** Criteria与DetachedCriteria**:理解Criteria API的使用,以及DetachedCriteria的概念,用于离线查询或预编译查询。 9. **关联映射**:一对一、一对多、多对一和多对多关联的配置与操作,包括懒加载和立即...
DetachedCriteria criteria = DetachedCriteria.forClass(Student.class); criteria.add(Restrictions.gt("age", 20)); List<Student> students = criteria.getExecutableCriteria(session).list(); ``` 5. **...
根据题目中的例子,我们有两个实体类`MainClass`和`SubClass`,它们之间存在多对多关系,并通过一个中间表进行关联。每个`MainClass`对象可以拥有多个`SubClass`对象,反之亦然。这种多对多的关系通常通过一个额外的...
- Criteria查询:使用Criteria、DetachedCriteria构建查询条件,可以添加限制、排序、分页等。 - 查询缓存:提高查询效率,分为一级缓存(Session缓存)和二级缓存(SessionFactory缓存)。 4. Hibernate面试题...
3. **Criteria API与DetachedCriteria**: 虽然不是直接的SQL,但Criteria API允许构建复杂的查询,最终也可以生成原生SQL。对于不直接使用SQL字符串,但需要灵活构造查询的场景非常有用。 4. **Named Native ...
Criteria API还可以与其他查询方式结合使用,比如DetachedCriteria,用于创建可延迟执行的查询,或者与Projection一起使用,获取特定字段的结果,而不仅仅是完整的实体对象。 总的来说,"09 Criteria查询方式"这个...
HQL支持命名参数和位置参数,例如上面的例子展示了如何通过`createQuery()`创建HQL查询,并使用`setParameter()`或`setParameterList()`设置参数。`uniqueResult()`用于获取单个结果,`list()`则用于获取结果集。 3...
通过Criteria、DetachedCriteria等接口,我们可以构建灵活的查询条件,而无需预先写好查询语句。 7. ** Criteria API 的子查询**: Criteria API 支持子查询,可以嵌套在主查询中,用于实现更复杂的逻辑,例如:找到...