jsp多条件查询 就像58同城搜索房源的查询 我在做一个租房网,但是多条件查询的时候很纠结 无从下手,没思路 ,各位大侠,帮帮忙!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把搜索条件动态的放到action中的String[] conditions 这个数组里。在service层组装 HQL查询语句。包括时间。即可。 您说的是把所有的条件都放到这个数组里? 然后组装hql吗? 为啥不给每个搜索框中加一个监听事件呢,输入一个自动查询,输入两个两个条件自动查询,这样做应该很easy吧 呃多条件查询就是sql或者hql的拼装 把参数放在map里面 然后在dao层拼接sql或者hql 写个方法public String getSqlByProperties() { String sql = "select s from SalaryStandardDetails s where 1=1"; if (!id.equals("")) { sql += " and s.id like '%" + id + "%' "; } if (!standardName.equals("")) { sql += " and s.standardName like '%" + standardName + "%' "; } if (!this.minTime.equals("") && !this.maxTime.equals("")) { sql += " and s.createTime between To_date('" + minTime + "','yyyy/MM/dd') and To_date('" + maxTime + "','yyyy/MM/dd')"; } else if (!this.minTime.equals("") && this.maxTime.equals("")) { sql += " and s.createTime > To_date('" + minTime + "','yyyy/MM/dd') "; } else if (this.minTime.equals("") && !this.maxTime.equals("")) { sql += " and s.createTime < To_date('" + maxTime + "','yyyy/MM/dd') "; } return sql; } 跟单条件没什么区别啊无非就是多拼几个参数而已,只要sql能写出来就没有什么问题 LZ说的没思路是什么意思 数据库设计? 多表查询? 还是拼SQL? 系统结构设计? 你都给我整矛盾了。。 如果是单表查询条件多也没什么 自己构建一个方法 我自己写过的 仅供参考:/** * 查询出满足conditions中的条件的entityClass实体类集合 并且按照orders中的数据进行排序 * * @param entityClass * 要查询的实体类 * @param conditions * 条件的集合 存储方式为 conditions.put("address","掌趣科技") * @param orders * 根据orders中的字段进行排序 存储方式为 orders.put("order","asc") * @return entityClass的集合 */ public <T> List<T> findAll(Class<T> entityClass, LinkedHashMap<String, Object> conditions, LinkedHashMap<String, String> orders) { DetachedCriteria detachedCriteria = DetachedCriteria .forClass(entityClass); Set<String> ordersKey = orders.keySet(); for (String orderKey : ordersKey) { if (orders.get(orderKey).equals("asc")) { detachedCriteria.addOrder(Order.asc(orderKey)); } else { detachedCriteria.addOrder(Order.desc(orderKey)); } } Set<String> conditionsKey = conditions.keySet(); for (String conditionKey : conditionsKey) { detachedCriteria.add(Restrictions.eq(conditionKey, conditions .get(conditionKey))); } conditions.clear(); orders.clear(); return super.getHibernateTemplate().findByCriteria(detachedCriteria); } 可以把条件封装成一个Bean,然后从页面取各个条件的值,再塞到这个Bean中. 有个按条件查询的方法有个参数就是这个Bean,先判断该Bean里的属性是否为空,如果不为空, 给加上条件, 最后返回要查询的list即可. 可以写个Conditions 类、里面是一些你需要的属性、比如房源地 house、价钱 money、大小 size、前台做个隐藏表单、封装这三个的隐藏控件如果需要很多搜索条件 (可以从数据库取出来所有条件),然后利用javascript或者jquery给 这三个控件赋值在提交给action、然后到后台接到conditions的条件,拆分且拼凑sql或者hql语句进行查询(会用到where 1=1 用于拼凑sql或者hql语句)前台需要的操作可能会多点、javascript/jquery +css+div思路就这样、 同问啊同问。拜读神人们的思路后想了个最土的思路。1、把所有要查询条件放入选择框内。2、where 1=1 +SQL条件+group by **。3、写代码吧。读过"sd4000784"大大的博客 基础太差 看不懂, 还是决定先用土办法。最近在从java 基础补起 如果有时间,像这种faceted search类似的功能我还是觉得用lucene比较好,并且solr现在上手不是太复杂,孙然一开始可能比用sql慢,但是后面如果查询条件扩展,会方便很多 SQL语句的拼接 暂时想到这 亲,你是用的什么结果过的网站啊????jsp+sevlert?还是SSH?还是其他的?大概思路就是你把页面高级查询的值封装搞一个Map集合里,去后台取,然后拼接sql语句!!! 字符串分割问题 jndi问题 高手有时间的时候帮偶看一下这个错误。。。。。。。 JavaScript 生成图片问题 如何用DAO封装数据持久层? 求助:使用Weblogic时的错误! 大家能给我这些问题的答案吗? 请求支持tomcat和Microsoft SQL Server如何配置 高手请进!!!问题超难!!!!(你能搞定吗???) java通过url下载图片,可以另存为,不要在代码里写死下载路径,求解。。。 ssh2 中如何创建表的时候 添加实体 和映射 让建立的表支持 hql 查询 mybatis分页 出错
在service层组装 HQL查询语句。包括时间。即可。
String sql = "select s from SalaryStandardDetails s where 1=1";
if (!id.equals("")) {
sql += " and s.id like '%" + id + "%' ";
}
if (!standardName.equals("")) {
sql += " and s.standardName like '%" + standardName + "%' ";
} if (!this.minTime.equals("") && !this.maxTime.equals("")) {
sql += " and s.createTime between To_date('" + minTime
+ "','yyyy/MM/dd') and To_date('" + maxTime
+ "','yyyy/MM/dd')";
} else if (!this.minTime.equals("") && this.maxTime.equals("")) {
sql += " and s.createTime > To_date('" + minTime + "','yyyy/MM/dd') ";
} else if (this.minTime.equals("") && !this.maxTime.equals("")) {
sql += " and s.createTime < To_date('" + maxTime + "','yyyy/MM/dd') ";
}
return sql;
}
无非就是多拼几个参数而已,
只要sql能写出来就没有什么问题
* 查询出满足conditions中的条件的entityClass实体类集合 并且按照orders中的数据进行排序
*
* @param entityClass
* 要查询的实体类
* @param conditions
* 条件的集合 存储方式为 conditions.put("address","掌趣科技")
* @param orders
* 根据orders中的字段进行排序 存储方式为 orders.put("order","asc")
* @return entityClass的集合
*/
public <T> List<T> findAll(Class<T> entityClass,
LinkedHashMap<String, Object> conditions,
LinkedHashMap<String, String> orders) {
DetachedCriteria detachedCriteria = DetachedCriteria
.forClass(entityClass); Set<String> ordersKey = orders.keySet();
for (String orderKey : ordersKey) {
if (orders.get(orderKey).equals("asc")) {
detachedCriteria.addOrder(Order.asc(orderKey));
} else {
detachedCriteria.addOrder(Order.desc(orderKey));
}
} Set<String> conditionsKey = conditions.keySet();
for (String conditionKey : conditionsKey) {
detachedCriteria.add(Restrictions.eq(conditionKey, conditions
.get(conditionKey)));
} conditions.clear();
orders.clear(); return super.getHibernateTemplate().findByCriteria(detachedCriteria);
}
里面是一些你需要的属性、比如房源地 house、价钱 money、大小 size、前台做个隐藏表单、封装这三个的隐藏控件如果需要很多搜索条件 (可以从数据库取出来所有条件),然后利用javascript或者jquery给 这三个控件赋值在提交给action、然后到后台接到conditions的条件,拆分且拼凑sql或者hql语句进行查询(会用到where 1=1 用于拼凑sql或者hql语句)前台需要的操作可能会多点、javascript/jquery +css+div
思路就这样、
拜读神人们的思路后想了个最土的思路。
1、把所有要查询条件放入选择框内。
2、where 1=1 +SQL条件+group by **。
3、写代码吧。
读过"sd4000784"大大的博客 基础太差 看不懂, 还是决定先用土办法。最近在从java 基础补起