1、查詢助手
1 package cn.buaa.core.util;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6
7 public class QueryHelper {
8
9 //from子句
10 private String fromClause = "";
11 //where子句
12 private String whereClause = "";
13 //orderBy子句
14 private String orderByClause = "";
15
16 private List<Object> parameters;
17
18 //排序常量
19 public static String ORDER_BY_DESC = "DESC"; //降序
20 public static String ORDER_BY_ASC = "ASC"; //升序
21 /**
22 * 構造from子句(有別名)
23 * @param clazz 實體類
24 * @param alias 實體類對應的別名
25 */
26 public QueryHelper(Class clazz,String alias){
27 fromClause = "From " + clazz.getSimpleName() + " " +alias ;
28 System.out.println(fromClause);
29 }
30 /** 31 * 構造from子句(無別名)
32 * @param clazz 實體類
33 */
34 public QueryHelper(Class clazz){
35 fromClause = "From " + clazz.getSimpleName() ;
36 }
37
38 /**
39 * 構造where子句
40 * @param condition 查詢條件語句:例如:i.title like ?
41 * @param params 查詢條件語句中?對應的查詢條件的值: 例如:%標題%
42 */
43 public void addCondition(String condition , Object... params ){
44 if(whereClause.length()>1){//非第一個查詢條件
45 whereClause += " AND " + condition;
46 }else{//第一個查詢條件
47 whereClause += " WHERE " + condition;
48 }
49
50 //設置查詢條件值到查詢條件集合中
51 if(parameters == null){
52 parameters = new ArrayList<Object>();
53 }
54 if(params != null){
55 for(Object param : params){
56 parameters.add(param);
57 }
58 }
59
60 }
61
62 /**
63 * 構造order by子句
64 * @param property 排序屬性:如:i.createTime
65 * @param order 排序順序,如:DESC 或 ASC
66 */
67 public void addOrderByProperty(String property,String order){
68 if(orderByClause.length()>1){//非第一個排序屬性
69 orderByClause += " ," + property + " " + order;
70 }else{//第一個排序屬性
71 orderByClause += " ORDER BY " + property + " " + order;
72 }
73 }
74 //查詢hql語句
75 public String getQueryListHql(){
76
77 return fromClause + whereClause + orderByClause ;
78 }
79
80 //查詢統計數的hql語句
81 public String getQueryCountHql(){
82
83 return "SELECT COUNT( * ) " + fromClause + whereClause;
84 }
85
86 //查詢hql語句中?對應的查詢條件值集合
87 public List<Object> getParameters(){
88
89 return parameters;
90 }
91 }
2、dao邏輯處理代碼
@Override
public PageResult getPageResult(QueryHelper queryHelper, int pageNo, int pageSize) {
Query query = getSession().createQuery(queryHelper.getQueryListHql());
List<Object> parameters = queryHelper.getParameters();
if(parameters != null){
for(int i= 0;i<parameters.size();i++){
query.setParameter(i, parameters.get(i));
}
}
if(pageNo<1) pageNo =1;
query.setFirstResult((pageNo-1)*pageSize);
query.setMaxResults(pageSize);
List items = query.list();
</span><span style="color: #008000;">//</span><span style="color: #008000;">獲取總記錄數</span></br> Query queryCount =<span style="color: #000000;"> getSession().createQuery(queryHelper.getQueryCountHql());</br> </span><span style="color: #0000ff;">if</span>(parameters != <span style="color: #0000ff;">null</span><span style="color: #000000;">){</br> </span><span style="color: #0000ff;">for</span>(<span style="color: #0000ff;">int</span> i= 0;i<parameters.size();i++<span style="color: #000000;">){</br> queryCount.setParameter(i, parameters.get(i));</br> }</br> }</br> </span><span style="color: #0000ff;">long</span> totalCount = (<span style="color: #0000ff;">long</span><span style="color: #000000;">) queryCount.uniqueResult();</br> </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">new</span><span style="color: #000000;"> PageResult(totalCount, pageNo, pageSize, items);</br> } </span></pre>
3、action調用處理代碼
1 protected PageResult pageResult;
2 private int pageNo;
3 private int pageSize;
4 。。。。 5
6 // 列表頁面
7 public String listUI() throws Exception {
8 // 加載分類集合
9 ActionContext.getContext().getContextMap().put("infoTypeMap", Info.INFO_TYPE_MAP);
10 QueryHelper queryHelper = new QueryHelper(Info.class,"i");
11 try {
12 if(info != null){
13 if(StringUtils.isNotBlank(info.getTitle())){
14 //搜索框亂碼問題解決
15 info.setTitle(URLDecoder.decode(info.getTitle(),"utf-8"));
16 queryHelper.addCondition("i.title like ? ", "%" + info.getTitle() + "%");
17 }
18 queryHelper.addCondition("i.state = ?", "1");
19 }
20 //根據創建時間降序排序
21 queryHelper.addOrderByProperty(" i.createTime ", QueryHelper.ORDER_BY_DESC); 22 //infoList = infoService.findObjects(queryHelper);
23 pageResult = infoService.getPageResult(queryHelper,getPageNo(),getPageSize());
24 } catch (Exception e) {
25 throw new ActionException("action出現異常:" + e.getMessage());
26 }
27 return "listUI";
28 }
4、struts配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="info-action" namespace="/nsfw" extends="base-default">
<action name="info_*" class="cn.buaa.nsfw.info.action.InfoAction"
method="{1}">
<result name="{1}">/WEB-INF/jsp/nsfw/info/{1}.jsp</result>
<result name="list" type="redirectAction">
<param name="actionName">info_listUI</param>
<!-- 搜索框搜索值回顯 -->
<param name="info.title">${strTitle}</param>
<param name="pageNo">${pageNo}</param>
<!-- 解決搜索框框亂碼 -->
<param name="encode">true</param>
</result>
</action>
</package>
</struts>
5、jsp顯示頁面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<%@include file="/common/header.jsp"%> <title>信息發布管理</title>
<script type="text/javascript">
//全選、全反選
function doSelectAll() {
// jquery 1.6 前
//$("input[name=selectedRow]").attr("checked", $("#selAll").is(":checked"));
//prop jquery 1.6+建議使用
$("input[name=selectedRow]").prop("checked", $("#selAll").is(":checked"));
}
</span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">添加</span></br> <span style="background-color: #f5f5f5; color: #0000ff;">function</span><span style="background-color: #f5f5f5; color: #000000;"> doAdd(){</br> document.forms[</span><span style="background-color: #f5f5f5; color: #000000;">0</span><span style="background-color: #f5f5f5; color: #000000;">].action</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">${basePath}nsfw/info_addUI.action</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">; document.forms[</span><span style="background-color: #f5f5f5; color: #000000;">0</span><span style="background-color: #f5f5f5; color: #000000;">].submit();</br> }</br> </span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">編輯</span></br> <span style="background-color: #f5f5f5; color: #0000ff;">function</span><span style="background-color: #f5f5f5; color: #000000;"> doEdit(id){</br> document.forms[</span><span style="background-color: #f5f5f5; color: #000000;">0</span><span style="background-color: #f5f5f5; color: #000000;">].action</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">${basePath}nsfw/info_editUI.action?info.infoId=</span><span style="background-color: #f5f5f5; color: #000000;">"</span> <span style="background-color: #f5f5f5; color: #000000;">+</span><span style="background-color: #f5f5f5; color: #000000;"> id;</br> document.forms[</span><span style="background-color: #f5f5f5; color: #000000;">0</span><span style="background-color: #f5f5f5; color: #000000;">].submit();</br> }</br> </span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">刪除</span></br> <span style="background-color: #f5f5f5; color: #0000ff;">function</span><span style="background-color: #f5f5f5; color: #000000;"> doDelete(id){</br> document.forms[</span><span style="background-color: #f5f5f5; color: #000000;">0</span><span style="background-color: #f5f5f5; color: #000000;">].action</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">${basePath}nsfw/info_delete.action?info.infoId=</span><span style="background-color: #f5f5f5; color: #000000;">"</span> <span style="background-color: #f5f5f5; color: #000000;">+</span><span style="background-color: #f5f5f5; color: #000000;"> id;</br> document.forms[</span><span style="background-color: #f5f5f5; color: #000000;">0</span><span style="background-color: #f5f5f5; color: #000000;">].submit();</br> }</br>
//多選刪除
function doDeleteAll(){
document.forms[0].action="${basePath}nsfw/info_deleteSelected.action";
document.forms[0].submit();
}
//異步發布信息,信息的id及將要改成的信息狀態
function doPublic(infoId,state){
//1、更新信息狀態
$.ajax({
url:"${basePath}nsfw/info_publicInfo.action",
data:{"info.infoId":infoId,"info.state":state},
type:"post",
success:function(msg){
//2、更新狀態欄,操作欄的顯示值
if("更新狀態成功" msg){
if(state 1){//說明信息狀態已被改成發布,狀態欄顯示發布,操作欄顯示停用
$("#show_"+infoId).html("發布");
$("#oper_"+infoId).html('<a href="javascript:doPublic(''+infoId+'',0)">停用</a>');
}else{
$("#show_"+infoId).html("停用");
$("#oper_"+infoId).html('<a href="javascript:doPublic(''+infoId+'',1)">發布</a>');
}
}else{
alert("更新信息狀態失敗!");
}
},
error:function(){
alert("更新信息狀態失敗!");
}
});
}var list_url = "${basePath}nsfw/info_listUI.action";
function doSearch(){
//重置頁號
$("#pageNo").val(1);
document.forms[0].action= list_url ;
document.forms[0].submit();
}
</script>
</head>
<body class="rightBody">
<form name="form1" action="" method="post">
<div class="p_d_1">
<div class="p_d_1_1">
<div class="content_info">
<div class="c_crumbs"><div><b></b><strong>信息發布管理</strong></div> </div>
<div class="search_art">
<li>
信息標題:<s:textfield name="info.title" cssClass="s_text" id="infoTitle" cssStyle="width:160px;"/>
</li>
<li><input type="button" class="s_button" value="搜 索" onclick="doSearch()"/></li>
<li style="float:right;">
<input type="button" value="新增" class="s_button" onclick="doAdd()"/>
<input type="button" value="刪除" class="s_button" onclick="doDeleteAll()"/>
</li>
</div><span style="color: #0000ff;"><</span><span style="color: #800000;">div </span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="t_list"</span><span style="color: #ff0000;"> style</span><span style="color: #0000ff;">="margin:0px; border:0px none;"</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">table </span><span style="color: #ff0000;">width</span><span style="color: #0000ff;">="100%"</span><span style="color: #ff0000;"> border</span><span style="color: #0000ff;">="0"</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">tr </span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="t_tit"</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">td </span><span style="color: #ff0000;">width</span><span style="color: #0000ff;">="30"</span><span style="color: #ff0000;"> align</span><span style="color: #0000ff;">="center"</span><span style="color: #0000ff;">><</span><span style="color: #800000;">input </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="checkbox"</span><span style="color: #ff0000;"> id</span><span style="color: #0000ff;">="selAll"</span><span style="color: #ff0000;"> onclick</span><span style="color: #0000ff;">="doSelectAll()"</span> <span style="color: #0000ff;">/></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">td </span><span style="color: #ff0000;">align</span><span style="color: #0000ff;">="center"</span><span style="color: #0000ff;">></span>信息標題<span style="color: #0000ff;"></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">td </span><span style="color: #ff0000;">width</span><span style="color: #0000ff;">="120"</span><span style="color: #ff0000;"> align</span><span style="color: #0000ff;">="center"</span><span style="color: #0000ff;">></span>信息分類<span style="color: #0000ff;"></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">td </span><span style="color: #ff0000;">width</span><span style="color: #0000ff;">="120"</span><span style="color: #ff0000;"> align</span><span style="color: #0000ff;">="center"</span><span style="color: #0000ff;">></span>創建人<span style="color: #0000ff;"></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">td </span><span style="color: #ff0000;">width</span><span style="color: #0000ff;">="140"</span><span style="color: #ff0000;"> align</span><span style="color: #0000ff;">="center"</span><span style="color: #0000ff;">></span>創建時間<span style="color: #0000ff;"></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">td </span><span style="color: #ff0000;">width</span><span style="color: #0000ff;">="80"</span><span style="color: #ff0000;"> align</span><span style="color: #0000ff;">="center"</span><span style="color: #0000ff;">></span>狀態<span style="color: #0000ff;"></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">td </span><span style="color: #ff0000;">width</span><span style="color: #0000ff;">="120"</span><span style="color: #ff0000;"> align</span><span style="color: #0000ff;">="center"</span><span style="color: #0000ff;">></span>操作<span style="color: #0000ff;"></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"></</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">s:iterator </span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="pageResult.items"</span><span style="color: #ff0000;"> status</span><span style="color: #0000ff;">="st"</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">tr </span><span style="color: #ff0000;"><s:if test</span><span style="color: #0000ff;">="#st.odd"</span><span style="color: #0000ff;">></span> bgcolor="f8f8f8" <span style="color: #0000ff;"></</span><span style="color: #800000;">s:if</span><span style="color: #0000ff;">></span><span style="color: #000000;"> ></br> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">td </span><span style="color: #ff0000;">align</span><span style="color: #0000ff;">="center"</span><span style="color: #0000ff;">><</span><span style="color: #800000;">input </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="checkbox"</span><span style="color: #ff0000;"> name</span><span style="color: #0000ff;">="selectedRow"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="<s:property value='infoId'/>"</span><span style="color: #0000ff;">/></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">td </span><span style="color: #ff0000;">align</span><span style="color: #0000ff;">="center"</span><span style="color: #0000ff;">><</span><span style="color: #800000;">s:property </span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="title"</span><span style="color: #0000ff;">/></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">td </span><span style="color: #ff0000;">align</span><span style="color: #0000ff;">="center"</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">s:property </span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="#infoTypeMap[type]"</span><span style="color: #0000ff;">/></span> <span style="color: #0000ff;"></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">td </span><span style="color: #ff0000;">align</span><span style="color: #0000ff;">="center"</span><span style="color: #0000ff;">><</span><span style="color: #800000;">s:property </span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="creator"</span><span style="color: #0000ff;">/></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">td </span><span style="color: #ff0000;">align</span><span style="color: #0000ff;">="center"</span><span style="color: #0000ff;">><</span><span style="color: #800000;">s:date </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="createTime"</span><span style="color: #ff0000;"> format</span><span style="color: #0000ff;">="yyyy-MM-dd HH:mm"</span><span style="color: #0000ff;">/></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">td </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="show_<s:property value='infoId'/>"</span><span style="color: #ff0000;"> align</span><span style="color: #0000ff;">="center"</span><span style="color: #0000ff;">><</span><span style="color: #800000;">s:property </span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="state==1?'發布':'停用'"</span><span style="color: #0000ff;">/></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">td </span><span style="color: #ff0000;">align</span><span style="color: #0000ff;">="center"</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">span </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="oper_<s:property value='infoId'/>"</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">s:if </span><span style="color: #ff0000;">test</span><span style="color: #0000ff;">="state==1"</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">a </span><span style="color: #ff0000;">href</span><span style="color: #0000ff;">="javascript:doPublic('<s:property value='infoId'/>',0)"</span><span style="color: #0000ff;">></span>停用<span style="color: #0000ff;"></</span><span style="color: #800000;">a</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"></</span><span style="color: #800000;">s:if</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">s:else</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">a </span><span style="color: #ff0000;">href</span><span style="color: #0000ff;">="javascript:doPublic('<s:property value='infoId'/>',1)"</span><span style="color: #0000ff;">></span>發布<span style="color: #0000ff;"></</span><span style="color: #800000;">a</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"></</span><span style="color: #800000;">s:else</span><span style="color: #0000ff;">></span></br></br> <span style="color: #0000ff;"></</span><span style="color: #800000;">span</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">a </span><span style="color: #ff0000;">href</span><span style="color: #0000ff;">="javascript:doEdit('<s:property value='infoId'/>')"</span><span style="color: #0000ff;">></span>編輯<span style="color: #0000ff;"></</span><span style="color: #800000;">a</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">a </span><span style="color: #ff0000;">href</span><span style="color: #0000ff;">="javascript:doDelete('<s:property value='infoId'/>')"</span><span style="color: #0000ff;">></span>刪除<span style="color: #0000ff;"></</span><span style="color: #800000;">a</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"></</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"></</span><span style="color: #800000;">s:iterator</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"></</span><span style="color: #800000;">table</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"></</span><span style="color: #800000;">div</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"></</span><span style="color: #800000;">div</span><span style="color: #0000ff;">></span></br> <span style="color: #0000ff;"><</span><span style="color: #800000;">jsp:include </span><span style="color: #ff0000;">page</span><span style="color: #0000ff;">="/common/pageNavigator.jsp"</span><span style="color: #0000ff;">/></span></br> <span style="color: #0000ff;"></</span><span style="color: #800000;">div</span><span style="color: #0000ff;">></span></br>
</form>
</body>
</html>
6、分頁代碼jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<div class="c_pate" style="margin-top: 5px;">
<s:if test="pageResult.totalCount > 0"> <table width="100%" class="pageDown" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right"> 總共<s:property value="pageResult.totalCount"/> <條記錄,當前第 < s:property value ="pageResult.pageNo" /> 頁, 共 < s:property value ="pageResult.totalPageCount" /> 頁 < s:if test ="pageResult.pageNo > 1" >
< a href ="javascript:doGoPage(<s:property value=" pageResult.pageNo-1" />)">上一頁 </ a >
</ s:if >
< s:if test ="pageResult.pageNo < pageResult.totalPageCount" > < a href ="javascript:doGoPage(<s:property value=" pageResult.pageNo+1" />)">下一頁 </ a >
</ s:if > 到 < input id ="pageNo" name ="pageNo" type ="text" style ="width: 30px;" onkeypress ="if(event.keyCode == 13){doGoPage(this.value);}" min ="1" max ="" value ="<s:property value=" pageResult.pageNo" />" />
</ td >
</ tr >
</ table >
</ s:if >< s:else > 暫無數據! </ s:else >
</ div >
< script type ="text/javascript" > // 翻頁
function doGoPage(pageNo){
document.getElementById( " pageNo " ).value = pageNo; document.forms[ 0 ].action = list_url;
document.forms[ 0 ].submit();
}
</ script >
</ div >
7、特別注意搜索框的回顯問題以及會先后亂碼的處理,還有struts配置文件的傳值問題