当前位置:编程学习 > JAVA >>

jsp多条件查询 就像58同城搜索房源的查询

我在做一个租房网,但是多条件查询的时候很纠结  无从下手,没思路 ,各位大侠,帮帮忙!!! --------------------编程问答-------------------- 把搜索条件动态的放到action中的String[] conditions 这个数组里。
在service层组装 HQL查询语句。包括时间。即可。
--------------------编程问答-------------------- 其实就是获取前台的数据,然后动态生成各种查询条件。没什么复杂的 --------------------编程问答-------------------- 您说的是把所有的条件都放到这个数组里?  然后组装hql吗?   --------------------编程问答--------------------
引用 2 楼  的回复:
其实就是获取前台的数据,然后动态生成各种查询条件。没什么复杂的


说的简单…    --------------------编程问答-------------------- 为啥不给每个搜索框中加一个监听事件呢,输入一个自动查询,输入两个两个条件自动查询,这样做应该很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);
}
--------------------编程问答--------------------
引用 11 楼  的回复:
LZ说的没思路是什么意思   数据库设计? 多表查询?  还是拼SQL? 系统结构设计?  你都给我整矛盾了。。  

如果是单表查询条件多也没什么  自己构建一个方法  我自己写过的  仅供参考:
Java code

/**
     * 查询出满足conditions中的条件的entityClass实体类集合 并且按照orders中的数据进行排序
     * 
     * @p……

++ --------------------编程问答-------------------- 可以把条件封装成一个Bean,然后从页面取各个条件的值,再塞到这个Bean中. 有个按条件查询的方法有个参数就是这个Bean,先判断该Bean里的属性是否为空,如果不为空, 给加上条件, 最后返回要查询的list即可. --------------------编程问答--------------------
引用 8 楼  的回复:
可以写个帮助类,具体做法,将条件作为对象,有属性:字段、操作符、值,然后组装成一个条件列表,再循环拼接成查询语句,希望对你有帮助!
 这个比较实际,现在应该都是这种做法吧 --------------------编程问答-------------------- 可以写个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语句!!! --------------------编程问答--------------------
引用 15 楼 sd4000784 的回复:
可以写个Conditions 类、
里面是一些你需要的属性、

比如房源地 house、价钱 money、大小 size、

前台做个隐藏表单、封装这三个的隐藏控件

如果需要很多搜索条件 (可以从数据库取出来所有条件),然后利用javascript或者jquery给 这三个控件赋值

在提交给action、

然后到后台接到conditions的条……
+1,这个用起来比较方便。。
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,