20 个解决方案
#1
把搜索条件动态的放到action中的String[] conditions 这个数组里。
在service层组装 HQL查询语句。包括时间。即可。
在service层组装 HQL查询语句。包括时间。即可。
#2
其实就是获取前台的数据,然后动态生成各种查询条件。没什么复杂的
#3
您说的是把所有的条件都放到这个数组里? 然后组装hql吗?
#4
说的简单…
#5
为啥不给每个搜索框中加一个监听事件呢,输入一个自动查询,输入两个两个条件自动查询,这样做应该很easy吧
#6
呃。。。多条件查询就是sql或者hql的拼装。。。
#7
把参数放在map里面 然后在dao层拼接sql或者hql
#8
可以写个帮助类,具体做法,将条件作为对象,有属性:字段、操作符、值,然后组装成一个条件列表,再循环拼接成查询语句,希望对你有帮助!
#9
写个方法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;
}
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;
}
#10
跟单条件没什么区别啊
无非就是多拼几个参数而已,
只要sql能写出来就没有什么问题。。。
无非就是多拼几个参数而已,
只要sql能写出来就没有什么问题。。。
#11
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);
}
#12
++
#13
可以把条件封装成一个Bean,然后从页面取各个条件的值,再塞到这个Bean中. 有个按条件查询的方法有个参数就是这个Bean,先判断该Bean里的属性是否为空,如果不为空, 给加上条件, 最后返回要查询的list即可.
#14
这个比较实际,现在应该都是这种做法吧
#15
可以写个Conditions 类、
里面是一些你需要的属性、
比如房源地 house、价钱 money、大小 size、
前台做个隐藏表单、封装这三个的隐藏控件
如果需要很多搜索条件 (可以从数据库取出来所有条件),然后利用javascript或者jquery给 这三个控件赋值
在提交给action、
然后到后台接到conditions的条件,拆分且拼凑sql或者hql语句进行查询(会用到where 1=1 用于拼凑sql或者hql语句)
前台需要的操作可能会多点、javascript/jquery +css+div
思路就这样、
里面是一些你需要的属性、
比如房源地 house、价钱 money、大小 size、
前台做个隐藏表单、封装这三个的隐藏控件
如果需要很多搜索条件 (可以从数据库取出来所有条件),然后利用javascript或者jquery给 这三个控件赋值
在提交给action、
然后到后台接到conditions的条件,拆分且拼凑sql或者hql语句进行查询(会用到where 1=1 用于拼凑sql或者hql语句)
前台需要的操作可能会多点、javascript/jquery +css+div
思路就这样、
#16
同问啊同问。
拜读神人们的思路后想了个最土的思路。
1、把所有要查询条件放入选择框内。
2、where 1=1 +SQL条件+group by **。
3、写代码吧。
读过"sd4000784"大大的博客 基础太差 看不懂, 还是决定先用土办法。
最近在从java 基础补起
拜读神人们的思路后想了个最土的思路。
1、把所有要查询条件放入选择框内。
2、where 1=1 +SQL条件+group by **。
3、写代码吧。
读过"sd4000784"大大的博客 基础太差 看不懂, 还是决定先用土办法。
最近在从java 基础补起
#17
如果有时间,像这种faceted search类似的功能我还是觉得用lucene比较好,并且solr现在上手不是太复杂,孙然一开始可能比用sql慢,但是后面如果查询条件扩展,会方便很多
#18
SQL语句的拼接 暂时想到这
#19
亲,你是用的什么结果过的网站啊????jsp+sevlert?还是SSH?还是其他的?大概思路就是你把页面高级查询的值封装搞一个Map集合里,去后台取,然后拼接sql语句!!!
#20
+1,这个用起来比较方便。。
#21
#1
把搜索条件动态的放到action中的String[] conditions 这个数组里。
在service层组装 HQL查询语句。包括时间。即可。
在service层组装 HQL查询语句。包括时间。即可。
#2
其实就是获取前台的数据,然后动态生成各种查询条件。没什么复杂的
#3
您说的是把所有的条件都放到这个数组里? 然后组装hql吗?
#4
说的简单…
#5
为啥不给每个搜索框中加一个监听事件呢,输入一个自动查询,输入两个两个条件自动查询,这样做应该很easy吧
#6
呃。。。多条件查询就是sql或者hql的拼装。。。
#7
把参数放在map里面 然后在dao层拼接sql或者hql
#8
可以写个帮助类,具体做法,将条件作为对象,有属性:字段、操作符、值,然后组装成一个条件列表,再循环拼接成查询语句,希望对你有帮助!
#9
写个方法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;
}
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;
}
#10
跟单条件没什么区别啊
无非就是多拼几个参数而已,
只要sql能写出来就没有什么问题。。。
无非就是多拼几个参数而已,
只要sql能写出来就没有什么问题。。。
#11
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);
}
#12
++
#13
可以把条件封装成一个Bean,然后从页面取各个条件的值,再塞到这个Bean中. 有个按条件查询的方法有个参数就是这个Bean,先判断该Bean里的属性是否为空,如果不为空, 给加上条件, 最后返回要查询的list即可.
#14
这个比较实际,现在应该都是这种做法吧
#15
可以写个Conditions 类、
里面是一些你需要的属性、
比如房源地 house、价钱 money、大小 size、
前台做个隐藏表单、封装这三个的隐藏控件
如果需要很多搜索条件 (可以从数据库取出来所有条件),然后利用javascript或者jquery给 这三个控件赋值
在提交给action、
然后到后台接到conditions的条件,拆分且拼凑sql或者hql语句进行查询(会用到where 1=1 用于拼凑sql或者hql语句)
前台需要的操作可能会多点、javascript/jquery +css+div
思路就这样、
里面是一些你需要的属性、
比如房源地 house、价钱 money、大小 size、
前台做个隐藏表单、封装这三个的隐藏控件
如果需要很多搜索条件 (可以从数据库取出来所有条件),然后利用javascript或者jquery给 这三个控件赋值
在提交给action、
然后到后台接到conditions的条件,拆分且拼凑sql或者hql语句进行查询(会用到where 1=1 用于拼凑sql或者hql语句)
前台需要的操作可能会多点、javascript/jquery +css+div
思路就这样、
#16
同问啊同问。
拜读神人们的思路后想了个最土的思路。
1、把所有要查询条件放入选择框内。
2、where 1=1 +SQL条件+group by **。
3、写代码吧。
读过"sd4000784"大大的博客 基础太差 看不懂, 还是决定先用土办法。
最近在从java 基础补起
拜读神人们的思路后想了个最土的思路。
1、把所有要查询条件放入选择框内。
2、where 1=1 +SQL条件+group by **。
3、写代码吧。
读过"sd4000784"大大的博客 基础太差 看不懂, 还是决定先用土办法。
最近在从java 基础补起
#17
如果有时间,像这种faceted search类似的功能我还是觉得用lucene比较好,并且solr现在上手不是太复杂,孙然一开始可能比用sql慢,但是后面如果查询条件扩展,会方便很多
#18
SQL语句的拼接 暂时想到这
#19
亲,你是用的什么结果过的网站啊????jsp+sevlert?还是SSH?还是其他的?大概思路就是你把页面高级查询的值封装搞一个Map集合里,去后台取,然后拼接sql语句!!!
#20
+1,这个用起来比较方便。。