findByCriteria(...)应该怎么用?

问题描述

findByCriteria(...)应该怎么用?public List<T> findByCriteria(Criterion... criterion) { return createCriteria(criterion).list(); }这个方法应该怎么用?比如表结构如下id pkmoney floattype_id fk按照type_id分组求sum(money) 在dao里应该怎么写?

解决方案

首先这是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里是不是违反了面向对象的思想呢?我不喜欢这么设计
解决方案二:
看了一下,发现这个Service里的方法写的是够烂的,我来解释一下。这个方式其实是一个多条件查询,用户不填写的话,代表忽略此条件。所以做了N次if判断

时间: 2024-07-29 10:43:37

findByCriteria(...)应该怎么用?的相关文章

Hibernate中Criteria的完整用法

最近在项目中使用 Spring 和 Hibernate 进行开发,有感于 Criteria 比较好用,在查询方法设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装.现在对 Hibernate的Criteria 的用法进行总结: Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Criteria和DetachedCriteria . Criteria 和 DetachedCriteria 的主要区别在于创建的

Spring+Hibernate实现的DAO层公共类

此EntityDao接口与EntityDaoImpl实现类,可取代了我们平时写的UserDao,NewsDao,CompanyDao等等,可直接供Service层调用.其中实现类的代码如下: /** * Copyright 2009-1012 the original author or authors. * My Blog site: http://www.blogjava.net/rongxh7 */ package rong.common.dao; import java.io.Seria

spring4.14+hibernate4.3整合,web运行正常,junit测试报错;

问题描述 spring4.14+hibernate4.3整合,web运行正常,junit测试报错: 之前web启动的时候也报这个错误,然后在web.xml里面加了这个filter,就好了. 可是现在用junit测试,没办法读取web.xml里面的配置,所以还报了这个错, 别问我为什么要junit测试,就是想知道 junit测试的时候这种情况怎么解决. 下面附代码 SpringOpenSessionInViewFilterorg.springframework.orm.hibernate4.sup

JqGrid会自动加载Hibernate的lazy属性字段吗?

问题描述 后台使用hibernate的findByCriteria方法进行查询@RequestMapping(value="/list")@ResponseBodypublic DataResponse<User> list(@RequestParam("page") String page,@RequestParam("rows") String rows,@RequestParam("sidx") String

项目分享:通过使用SSH框架的公司-学员关系管理系统(CRM)

----------------------------------------------------------------------------------------------[版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/52506671作者:朱培      ID:sdksdk0      邮箱: zhupei@tianfang1314.cn    ------------------

关于ssh开发的一点小结

    废话 start    从学习ssh以来,忙碌了那么久,做了那么多实践开发项目,一直想总结一下,一直没时间和心思写,现在趁着上班打酱油的时间简单的总结一下吧! 他们说,跨的太大了就容易扯蛋! 废话 end Struts2: 一,             struts.xml配置最简化    namespace:是指访问路径的命名空间,默认情况是项目根路径.例如项目名称为news    配置如下:     <package name="default"namespace=&

ssh搭建开发环境

公司一直不是ssh零配置的框架,每次写action都要在applicationcontext和struts里面配置,好麻烦,最近有空,写了一个ssh零配置的框架 这里写了一个小的项目,以用户权限管理为例 先做准备工作: 1.struts2去官网下载最新版struts开发包http://struts.apache.org/download.cgi#struts216 2.hibernate4去官网下载最新版hibernate4开发包http://sourceforge.net/projects/h

代码-关于Hibernate的动态查询

问题描述 关于Hibernate的动态查询 今天修改原来的分页代码,如下: DetachedCriteria dc=DetachedCriteria.forClass(Question.class); dc.add(Restrictions.isNotNull("userid")); //不为空 List questions=(List) this.hibernateTemplate.findByCriteria(dc,0,3); System.out.println("内容

spring整合hibernate-关于spring+hibernate配置多数据源的问题

问题描述 关于spring+hibernate配置多数据源的问题 我的项目是个webservice项目,使用了hibernate+spring框架,由于项目中要用到两个数据库(都是oracle数据库),我在网上查了一些资料,但是在我的项目中做数据源切换的时候总是切换不过去,也就是说只能连接默认的数据源,一下是我的spring配置文件: <?xml version="1.0" encoding="UTF-8"?> xmlns:xsi="http: