查询设计
??? 需求是這樣的,一個業務模塊有三個TAB頁,分別為簡單查詢、高級查詢、導出。
??? 簡單查詢:幾個常用的、固定的條件的查詢;
??? 高級查詢:用戶可編輯條件的個數,以及條件之間是與、或的關系;
??? 導出:根據用戶導出的結果,選擇開始、結束記錄號進行導出,當然可以導出txt或者excel
??
??? 結果列有根據列名排序、記錄導出的功能,所以要記錄查詢條件(queryCondition),即把查詢條件有記錄到request中,排序、導出時就不在構建查詢條件,當然這樣也有不足,就是依賴于查詢條件(queryCondition)這個字符串,而沒有在查詢結果列表中把查詢的條件解析開來,用戶看不到他上次輸的條件,比較失敗.但記錄了查詢條件,可以做一些重復下載的操作,這個設計還是很好的。
??? 由于查詢條件(queryCondition)有時會保存到DB中,為了安全,在往request里set之前加密,
queryCondition = new String(Base64.encodeBase64(queryCondition.getBytes(), false));?? 取出時解密:
queryCondition = (String) dynaBean.get("queryCondition");queryCondition = new String(Base64.decodeBase64(queryCondition.getBytes()));?
加密后的串在URL作為參數傳遞時有時候會有因為有特殊字符而報錯,這時用javascript提供的URI編碼就可以了,在服務器端直接就可以得到完整的數據。
??
encodeURIComponent('${queryCondition}')?
?下面是根據一個最大值,最小值、查詢條件取記錄的SQL
<select id="getExportTxtDate" parameterClass="java.util.Map"resultClass="magazineBean" remapResults="true">SELECT * FROM ( SELECT list.*, rownum as RNUM FROM (select * from (select b.id as id ,a.CorpID as corpID ,a.CORP_PROVINCENO as provinceNo ,a.Corp_chineseName as chineseName ,b.cn as cn,b.issn as issn,c.Corp_chineseName as directorCorpName,a.Corp_sponsorCorp as sponsorCorp,b.proprieter as proprieter,b.editor as editor,f.Corp_linkTel as linkTel,f.Corp_fax as fax,b.Post_id as postId,e.issue_way as issueWay,b.Size_num as sizeNum ,b.issued_period as issuedPeriod,f.Corp_address as address,f.Corp_postCode as postCode,b.Year_price as yearPrice ,b.Create_date as createMagazineDate,a.Corp_tenet as tenet,a.Corp_englishName as englishName ,a.Corp_legalPerson as legalPerson,a.Corp_chargeMan as chargeMan,a.Corp_createDate as createDate,a.Corp_divide as divide,d.AreaCode_all as areaCodeAll from Corp_info a,Corp_Magazine b,Corp_info c,Corp_AreaCode d,Corp_issue_way e, (select * from Corp_linkPersonInfo where id in (select max(id) from Corp_linkPersonInfo group by corpID)) f where a.CorpID=b.CorpID and a.Corp_directorCorpID=c.CorpID(+) and a.Corp_provinceNO=d.id(+) and b.issue_way_id=e.id(+)and a.CorpID=f.CorpID(+) ) where 1=1 <isNotEmpty prepend="AND" property="queryCondition">( $queryCondition$ ) </isNotEmpty>ORDER BY $orderColumn$ $orderType$ ) list WHERE ROWNUM <= #maxRow# ) WHERE RNUM >= #minRow#?
總結
- 上一篇: axis2初步
- 下一篇: 利用冒泡排序法实现select opti