HQL多条件查询判断的问题

问题描述

有客户、编号、发货日期、截止日期4个查询条件,查询出对应的记录的条数,我的HQL查询代码如下:public Long getCount(String soNumber, Long customerID, Date startDate, Date endDate) { String hql = "select count(*) from SalesOrder salesOrder where 1=1"; if(!"".equals(soNumber)){ hql =hql+" and sal.soNumber=?"; } if(customerID!=null){ hql= hql+" and sal.customer.customerID =?"; }if(startDate!=null){ hql=hql+" and sal.jiaohuoriqi >=? and sal.jiaohuoriqi<=?"; } Object[] count =new Object[]{soNumber,customerID,startDate,endDate}; return (Long)this.getHibernateTemplate().find(hql,count).get(0);}我的问题是 我把参数放在了数组里面,对应不同的情况数组怎么判断?

解决方案

参数直接放进来就好了啊public Long getCount(String soNumber, Long customerID, Date startDate, Date endDate) { String hql = "select count(*) from SalesOrder salesOrder where 1=1"; if(!"".equals(soNumber)){ hql =hql+" and sal.soNumber="+soNumber; } if(customerID!=null){ hql= hql+" and sal.customer.customerID ="+customerID; }if(startDate!=null){ hql=hql+" and sal.jiaohuoriqi >='"+startDate+"' and sal.jiaohuoriqi<= '"+endDate+"'"; } return (Long)this.getHibernateTemplate().find(hql).get(0);}
解决方案二:
直接放进去肯定是不行的,这说明你写代码的不严谨,要防止用户SQL注入问题,最好是用参数方式。也省事,很多潜在BUG,比如说用户输入 “单引号”,你转换的sql就有问题了。
解决方案三:
沙发都帮你改了,就是那样子的
解决方案四:
一个问号对应一个参数,你上面拼接,?不定,参数固定4个,肯定不行的还是直接将参数写到hql语句里
解决方案五:
你这个是一个查询参数匹配的问题。当有一个参数条件不成立的时候你的数组要-1;结合这样的特点,其实你可以考虑使用可变集合List,而不是数组;public Long getCount(String soNumber, Long customerID, Date startDate, Date endDate) { List<Object> paramList = new ArrayList<Object>(); String hql = "select count(*) from SalesOrder salesOrder where 1=1"; if(!"".equals(soNumber)){ hql =hql+" and sal.soNumber=?"; paramList.add(soNumber); } if(customerID!=null){ hql= hql+" and sal.customer.customerID =?"; paramList.add(customerID); } if(startDate!=null){ hql=hql+" and sal.jiaohuoriqi >=? and sal.jiaohuoriqi<=?"; paramList.add(startDate); paramList.add(endDate); } return (Long)this.getHibernateTemplate().find(hql,paramList.toArray()).get(0); }

时间: 2024-09-14 02:02:13

HQL多条件查询判断的问题的相关文章

hibernate的hql多个查询条件如何快捷的拼接

问题描述 hibernate的hql多个查询条件如何快捷的拼接 比如说有个检索,可能要检索A,B,C,D,E五个属性,那么在hql中拼接的语句就应该是 from table where A=? and b=? and C=? and D=? and E=?这样子,但是现实情况是比较复杂的,如果手动去拼接这个字符串比较复杂,什么时候加where就是个问题了,更何况有的属性查询有的不查询,求各位大神有什么现成的解决方案吗?或者我自己写代码的话是什么思路呢? 解决方案 你们回答的都不对,我找到解决办法

Hibernate多对多关联映射的HQL中的in条件查询问题

群里有朋友求解一个问题,高分求一条HQL多对多查询语句 . 问题描述见 http://topic.csdn.net/u/20090621/16/4eac6fe0-bf3e-422e-a697-f7584732f66e.html, 摘要如下: 一个学科表(Field),一个用户表(User),多对多关系. 学科表有两个字段,id和descripiton,用户表有众多字段,不罗列了 Field中有SET集合users User中有SET集合fields 现在要查掌握id like '520%'的女性

hql语句-hql带多个条件查询报null错误,但是数据库能查到值

问题描述 hql带多个条件查询报null错误,但是数据库能查到值 String hql = "from Userinfo u where u.userName=? and u.userPassword=? and u.sysrole.roleCode='1101'"; Query query = this.getSession().createQuery(hql); query.setParameter(0, userName); query.setParameter(1, userP

【SSH项目实战】国税协同平台-24.条件查询分析与实现

我们之前做好了信息发布管理这一块的功能 这次我们就以这个模块为例,去为其添加查询和分页功能. 我们先从查询功能做起: 条件查询(QueryHelper): 1.查询条件语句hql: from 子句:必定出现:而且只出现一次 where 子句:可选:但关键字where 出现一次:可添加多个查询条件 order by子句:可选:但关键字order by 出现一次:可添加多个排序属性 2.查询条件值集合: 出现时机:在添加查询条件的时候,?对应的查询条件值 例子: FROM Info WHERE ti

条件查询分页问题

问题描述 小弟刚出道的JAVA程序员,遇到了一个分页显示问题,全部查询的时候,分页没什么问题,可是面对一个多条件的查询分页显示,搞了一天的测试,知道了什么问题,但是去解决,以失败告终.好了废话不多说了,贴出来大家看看#11头一次发帖子,见谅~ ~!分2种情况:1. 都不填写值时,点击搜索,显示所有信息,并分页.2. 4选1,4选2,4选3 或者都填写,点击搜索,根据所填值或者选择的值进行分页显示.问题是,按理想的出结果了,但是,跳完action回来之后,下一页,数字转化异常.限于文字的限制,只贴

ASP项目中的通用条件查询模块

一.提出问题:    在大型的ASP项目中,都涉及到了条件查询这一功能.用户要求能够针对特定的字段进行查询.对于有些数据,是从多个表取出来的,因此也要能对多个表进行查询.    一般的话,大多数的做法就是每个程序都做一个查询功能,因为每个查询的表都不同,涉及的字段也不同.但是,如果在大型的ASP项目中这么做的话,不仅增加了工作量.影响开发进度,而且不能使系统模块化.代码复用,增加了系统维护难度.因此,我们有必要使条件查询模块化. 二.解决思路:    我们设计条件查询的功能为:    1.选择查

NHibernate之旅(4):探索查询之条件查询(Criteria Query)

本节内容 NHibernate中的查询方法 条件查询(Criteria Query) 1.创建ICriteria实例 2.结果集限制 3.结果集排序 4.一些说明 根据示例查询(Query By Example) 实例分析 结语 上一节,我们介绍了NHibernate查询语言的一种:NHibernate查询语言(HQL,NHibernate Query Language),这一节介绍一下条件查询(Criteria API). NHibernate中的查询方法 在NHibernate中提供了三种查

mysql条件查询if case用法

  where条件查询 代码如下 select * from news where DATE(adddate) between '2011-04-20' - INTERVAL 5 DAY and '2011-04-20' + INTERVAL 5 DAY select * from news where DATE(adddate) in ('2011-04-20','2011-04-15','2011-04-25') IF条件语句的使用 mysql条件判断语句if的使用:先判断数据库中是否存在是

PHP组合查询多条件查询实例代码第1/2页_php基础

   先向大家说明需求:按照我们系统的要求,我们将通过部门名称.员工姓名.PC名称.IP地址等等字段来进行组合查询从而得到想要的数据结果.那么,为了简单起见,我们用两个条件(部门名称.员工姓名)的组合查询来向大家说明这一技术技巧.当我们只输入部门名而员工姓名为空值时,那么部门内所有员工信息将被呈现,只有当你同时限制部门与员工姓名时,才能查询出唯一信息.     那就让我们开始.     首先建立查询页面search.php,不同于上次单一条件查询,这次我们需要两个条件的组合进行查询. <html