1. 程式人生 > >sql拼接實現自由多條件查詢及內容分頁總結

sql拼接實現自由多條件查詢及內容分頁總結

上週接受了一個新任務,實現cms新內容管理模組的多條件查詢及內容分頁

首先,我先實現了html頁面的隱藏與顯示條件輸入框。

網上一般的方法就是用js顯示或隱藏層實現

htmlz中:<input type="button" id="searchMore" value="更多搜尋條件" onclick="moreCondition()"> 

JS程式碼:

function moreCondition(){
    var showMore = document.getElementById("hiddenMore");
    if(showMore.style.display=="none"){
   showMore.style.display="block";
    }
    else{
   showMore.style.display="none";
    }    
 
}

然後頁面用struts2標籤+JSP+EL表示式實現

後臺最重要的其實就是查詢和分頁的sql語句:

程式碼如下:

@Override
public List getSearchArticle(int pageNo, int pageSize, String nodeId,String childNodeId, String title, String editor, String author,
String beginTime, String endTime) throws AppException {
String sql = "select top "+pageSize+" * from (select b.*,a.nodeId,a.nodeIdLevel3,a.nodeIdLevel2, ROW_NUMBER() OVER(ORDER BY b.insertedTime desc) AS ROWNUMBER ";
sql+="from cms_FK_nodeArticle as a join cms_article as b on a.articleId = b.id where a.mainFlag = '"+Constance.MAIN_FLAG+"' and b.status!= '"+Constance.DATA_STATUS_STOP+"'";
    
   if(childNodeId != null && !childNodeId.equals("")){
sql += " and (nodeIdLevel4='"+childNodeId+"')  ";
}else{
if( nodeId != null && nodeId.trim().length() > 0 )
sql += " and (nodeIdLevel3='"+nodeId+"')  ";
   }

if(title != null && title.trim().length() > 0){
sql += " and title like '%"+title+"%' ";
}

if(editor != null && editor.trim().length() > 0){
sql += " and editor ='"+editor+"'";
}

if(author != null && author.trim().length() > 0){
  sql += " and author = '"+author+"'";
}

if(beginTime != null && beginTime.trim().length() > 0 && endTime != null && endTime.trim().length() > 0){
  sql += " and insertedTime between '"+beginTime+"' and '"+endTime+" 23:59:59'";
}

sql+=") F where F.rownumber >"+(pageNo-1)*pageSize;
   JdbcHelper jdbcUtil=(JdbcHelper)SpringBeanUtil.getBean("jdbcBaseTransaction");
return jdbcUtil.queryForList(sql);

}

查詢出分頁結果,在前端讀取,其中最麻煩的是每當點下一頁後的引數傳遞問題。

網上有兩種方法,一種是提交action後面引數拼接法 為  Parametername="value" &param....等

另一種方法是用js控制form提交,就是在form裡隱藏寫一個儲存頁碼的隱藏域,然後用js控制隨表單提交,我是受別人網上說的,在頁面裡用session儲存傳遞的引數

但是session有其侷限性,一是session有一定的時效,過一段時間session會失效,另外session由於瀏覽器不關會一直存在的,所以有時候會需要清除快取

反正我做的最後查詢的時候,有時候會出亂子,希望朋友們給我指點個更好的方法實現多條件自由分頁查詢。