(十五)条件查询

条件查询信息列表

1、  在baseDao、baseDaoImpl中编写和实现findObjects(String hql, List<Object> parameters)

2、  在service、serviceImpl中调用baseDao中的条件查询方法

3、  在action中用service中新写的findObjects(String hql, List<Object> parameters)进行条件查询

4、  添加listUI.jsp中的查询方法。

 优化查询-查询工具类QueryHelper

设计一个查询工具类QueryHelper,里面需要对将要查询的hql和参数进行组装,然后将此对象传递给service运用并返回结果。该工具类主要方法有:

①   QueryHelper(Class clazz, String alias) 构造器,主要组装from 子句

②   addCondition(String condition, Object... param) 组装where子句

③   addOrderByProperty(String property, String order) 组装order by 子句

④   getListQueryHql() 返回查询列表的hql

⑤   getCountQueryHql() 返回统计总记录数的hql

⑥   getParameters() 返回参数列表

 

具体类实现:

 1 package cn.itcast.core.utils;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 public class QueryHelper {
 7     
 8     //from 子句
 9     private String fromClause = "";
10     //where 子句
11     private String whereClause = "";
12     //order by 子句
13     private String orderByClause = "";
14     
15     //where 子句中?对应的参数值
16     private List<Object> parameters;
17     
18     public static String ORDER_BY_ASC = "ASC";//升序
19     public static String ORDER_BY_DESC = "DESC";//降序
20     
21     /**
22      * 利用构造方法构造from子句
23      * @param clazz 实体类
24      * @param alias 别名
25      */
26     public QueryHelper(Class clazz, String alias){
27         fromClause = "FROM " + clazz.getSimpleName() + " " + alias;
28     }
29     /**
30      * 组装where子句
31      * @param condition 条件
32      * @param params 条件中?对应的参数值
33      * @return QueryHelper
34      */
35     public QueryHelper addCondition(String condition, Object...params){
36         if(whereClause.length() > 0){
37             whereClause += " AND " + condition;
38         } else {
39             whereClause = " WHERE " + condition;
40         }
41         if(parameters == null){
42             parameters = new ArrayList<Object>();
43         }
44         for(Object param: params){
45             parameters.add(param);
46         }
47         return this;
48     }
49     /**
50      * 构建order by 子句
51      * @param property 排序的属性
52      * @param order 升序(asc)或是降序(desc)
53      * @return QueryHelper
54      */
55     public QueryHelper addOrderByProperty(String property, String order){
56         if(orderByClause.length() > 0){
57             orderByClause += "," + property + " " + order;
58         } else {
59             orderByClause += " ORDER BY " + property + " " + order;
60         }
61         return this;
62     }
63 
64     //返回列表查询hql语句
65     public String getListQueryHql(){
66         return fromClause + whereClause + orderByClause;
67     }
68     
69     //返回查询总记录数的hql
70     public String getCountHql(){
71         return "SELECT Count(*) " + fromClause + whereClause;
72     }
73     
74     public List<Object> getParameters() {
75         return parameters;
76     }
77 }

利用新的查询工具类QueryHelper在baseDao中新编写一个findObjects(QueryHelper qh)方法进行页面的条件查询。

baseDao

baseDaoImpl

对应的service/serviceImpl也添加此方法提供给action调用。

 

在对应的action中查询可以使用查询助手进行:

条件回显

1、  条件删除后回显查询条件

当在列表页中,通过条件查询了记录后,并对记录进行了删除,应当在删除后返回查询列表时保留查询条件。

改造action中的查询方法,对中文查询条件进行decode 

在配置文件中redirectAction时,对中文参数进行encode:

2、  条件编辑后回显查询条件

当在列表页中,通过条件查询了记录后,并对记录进行了编辑,应当在编辑后返回查询列表时保留查询条件。

 

此时应当①在跳转到编辑页面的方法中先将列表中的查询条件缓存起来避免被覆盖;②在转发跳转到编辑页面时,在页面中应对缓存起来的条件在页面中暂存避免遗漏查询条件;③当编辑页面提交并保存编辑后,重定向到列表方法之际,应当把原有的查询条件作为参数传递到查询列表方法

posted on 2016-10-08 16:37  Michael2397  阅读(581)  评论(0编辑  收藏  举报

导航