主要使用Oracle的三層sql實現(xiàn)分頁!
一 環(huán)境:XP3+Oracle10g+MyEclipse6+(Tomcat)+JDK1.5
二 工程相關(guān)圖片:
1 DEMO圖片
2 工程代碼圖片
3 相關(guān)jar包圖片
三 此示例是在:
SSI:SpringMVC3+Mybatis3(登錄及CRUD操作)基礎(chǔ)上加的分頁功能:
四 主要代碼文件
1 BaseController.java用于子類調(diào)用方便
packagecom.liuzd.ssm.web;
importjavax.servlet.http.HttpServletRequest;
importcom.liuzd.page.Page;
importcom.liuzd.page.PageState;
importcom.liuzd.page.PageUtil;
publicclassBaseController?{
protectedPage?executePage(HttpServletRequest?request,Long?totalCount){
if(null==?totalCount){
totalCount?=?0L;
}
/**頁面狀態(tài),這個狀態(tài)是分頁自帶的,與業(yè)務(wù)無關(guān)*/
String?pageAction?=?request.getParameter("pageAction");
String?value?=?request.getParameter("pageKey");
/**獲取下標(biāo)判斷分頁狀態(tài)*/
intindex?=?PageState.getOrdinal(pageAction);
Page?page?=null;
/**
*?index?<?1?只有二種狀態(tài)
*?1?當(dāng)首次調(diào)用時,分頁狀態(tài)類中沒有值為?NULL?返回?-1
*?2?當(dāng)頁面設(shè)置每頁顯示多少條:?index=0,當(dāng)每頁顯示多少條時,分頁類要重新計算
*?*/
Page?sessionPage?=?getPage(request);
if(index?<1){
page?=?PageUtil.inintPage(totalCount,index,value,sessionPage);
}else{
page?=?PageUtil.execPage(index,value,sessionPage);
}
setSession(request,page);
returnpage;
}
privatePage?getPage(HttpServletRequest?request)?{
Page?page?=?(Page)request.getSession().getAttribute(PageUtil.SESSION_PAGE_KEY);
if(page?==null){
page?=newPage();
}
returnpage;
}
privatevoidsetSession(HttpServletRequest?request,Page?page)?{
request.getSession().setAttribute(PageUtil.SESSION_PAGE_KEY,page);
}
}
2 UserController.java
packagecom.liuzd.ssm.web;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importjavax.annotation.Resource;
importjavax.servlet.http.HttpServletRequest;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.PathVariable;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.SessionAttributes;
importorg.springframework.web.servlet.ModelAndView;
importcom.liuzd.page.Page;
importcom.liuzd.ssm.entity.User;
importcom.liuzd.ssm.service.UserService;
@Controller
@RequestMapping("/user")
@SessionAttributes("userList")
publicclassUserControllerextendsBaseController{
privateUserService?userService;
publicUserService?getUserService()?{
returnuserService;
}
@Resource
publicvoidsetUserService(UserService?userService)?{
this.userService?=?userService;
}
@RequestMapping("/userList")
publicModelAndView?userList(HttpServletRequest?request){
Map?params?=newHashMap();
//添加查詢條件
//?...?params.put("name","jack");...
//獲取總條數(shù)
Long?totalCount?=this.getUserService().pageCounts(params);
//設(shè)置分頁對象
Page?page?=?executePage(request,totalCount);
//如排序
if(page.isSort()){
params.put("orderName",page.getSortName());
params.put("descAsc",page.getSortState());
}else{
//沒有進(jìn)行排序,默認(rèn)排序方式
params.put("orderName","age");
params.put("descAsc","asc");
}
//壓入查詢參數(shù):開始條數(shù)與結(jié)束條靈敏
params.put("startIndex",?page.getBeginIndex());
params.put("endIndex",?page.getEndinIndex());
ModelAndView?mv?=newModelAndView();
//查詢集合
List?users?=this.getUserService().pageList(params);
mv.addObject("userList",users);
mv.setViewName("userList");
returnmv;
}
}
3 UserMapper.java
packagecom.liuzd.ssm.mapper;
importjava.util.List;
importjava.util.Map;
importorg.apache.ibatis.session.RowBounds;
importcom.liuzd.ssm.entity.User;
publicinterfaceUserMapper{
//?.....
publicList?pageList(Map?params);
//分頁總條數(shù)
publicLong?pageCounts(Map?p);
}
4 UserMapper.xml
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select?ttt.*?from(select?tt.*,rownum?rn?from(select?*?from?users
特別提醒一下,?$只是字符串拼接,?所以要特別小心sql注入問題。
在開發(fā)時使用:?$,方便調(diào)試sql,發(fā)布時使用:?#
and?name?like?#{name},
-->
and?name?like'%${name}%'
and?sex?=?#{sex}
order?by?${orderName}?${descAsc}?)tt)ttt
rn?>?${startIndex}
select?count(*)?from?users
and?name?like?#{name}
and?sex?=?#{sex}
5 userList.jsp
<%@?page?language="java"pageEncoding="UTF-8"contentType="text/html;?charset=UTF-8"%>
<%@?taglib?uri="/WEB-INF/c.tld"prefix="c"%>
<%@?include?file="/common/meta.jsp"%>
姓名${page.sortName?eq"name"??page.sortInfo?:?page.defaultInfo}
年齡${page.sortName?eq"age"??page.sortInfo?:?page.defaultInfo}
性別${page.sortName?eq"sex"??page.sortInfo?:?page.defaultInfo}
地址${page.sortName?eq"address"??page.sortInfo?:?page.defaultInfo}
操作
${user.name}
${user.age}
${user.sex?eq1?"男":?user.sex?eq2?"女":"未知"}
${user.address}
hrf="${pageContext.request.contextPath}/user/toAddUser.do">添加
href="${pageContext.request.contextPath}/user/getUser/${user.id}.do">編輯
href="${pageContext.request.contextPath}/user/delUser/${user.id}.do">刪除
返回
6 page.jsp,此頁面你不用關(guān)心,只管引用就行了
Java代碼<%@?page?language="java"contentType="text/html;?charset=UTF-8"pageEncoding="UTF-8"%>
<%@?taglib?uri="/WEB-INF/c.tld"prefix="c"%>
共${page.totalCount}條記錄?共${page.totalPage}頁?每頁顯示${page.everyPage}條
當(dāng)前第${page.currentPage}頁
<<首頁 <上頁
<<首頁
<上一頁
||
下頁> 尾頁>>
下一頁>
末頁>>
onchange="getCurrentPage(this.value);">
第${index}頁
每頁顯示:
${pageCount}條
function?getCurrentPage(index){
var?a?=?document.getElementById("indexPageHref");
a.href?='${pathurl}?pageAction=gopage&pageKey='+index+'${urlParams}';
a.setAttribute("onclick",'');
a.click("return?false");
}
function?setEveryPage(everyPage){
var?a?=?document.getElementById("indexPageHref");
var?currentPage?=?document.getElementById('indexChange').value;
a.href?='${pathurl}?pageAction=setpage&pageKey='+everyPage+'${urlParams}';
a.setAttribute("onclick",'');
a.click("return?false");
}
function?sortPage(sortName){
var?a?=?document.getElementById("indexPageHref");
a.href?='${pathurl}?pageAction=sort&pageKey='+sortName+'${urlParams}';
a.setAttribute("onclick",'');
a.click("return?false");
}
1. 使用阿里巴巴Druid連接池(高效、功能強(qiáng)大、可擴(kuò)展性好的數(shù)據(jù)庫連接池、監(jiān)控數(shù)據(jù)庫訪問性能、支持Common-Logging、Log4j和JdkLog,監(jiān)控數(shù)據(jù)庫訪問)
2. 提供高并發(fā)JMS消息處理機(jī)制
3. 所有功能模塊化、所有模塊服務(wù)化、所有服務(wù)原子化的方式,提供可拓展的服務(wù)模型,使程序穩(wěn)定運行,永不宕機(jī)
4. 提供Wink Rest、Webservice服務(wù),故可作為獨立服務(wù)平臺部署
框架整合:
Springmvc + Mybatis + Shiro(權(quán)限) + REST(服務(wù)) + WebService(服務(wù)) + JMS(消息) + Lucene(搜搜引擎) + Quartz(定時調(diào)度) + Bootstrap Html5(支持PC、IOS、Android)
框架簡介:
項目Maven構(gòu)建,真實大型互聯(lián)網(wǎng)架構(gòu),做到高并發(fā),大數(shù)據(jù)處理,整個項目使用定制化服務(wù)思想,提供模塊化、服務(wù)化、原子化的方案,將功能模塊進(jìn)行拆分,可以公用到所有的項目中。架構(gòu)采用分布式部署架構(gòu),所有模塊進(jìn)行拆分,使項目做到絕對解耦,穩(wěn)定壓倒一切~~
持續(xù)集成:
1. 我的待辦工作流服務(wù)(提供Webservice服務(wù))
2. 我的待辦工作流集成JMS消息服務(wù)(支持高并發(fā),可支持成千上萬系統(tǒng)集成)
3. 我的任務(wù)提供Rest服務(wù),完成日常的工作管理,通過定時調(diào)度平臺,動態(tài)生成我的任務(wù)、循環(huán)周期任務(wù)、定時郵催提醒完成任務(wù)等
4. 文件上傳、多線程下載服務(wù)化、發(fā)送郵件、短信服務(wù)化、部門信息服務(wù)化、產(chǎn)品信息服務(wù)化、信息發(fā)布服務(wù)化、我的訂閱服務(wù)化、我的任務(wù)服務(wù)化、公共鏈接、我的收藏服務(wù)化等
系統(tǒng)模塊:
1.? 用戶管理:
用戶信息管理(添加、刪除、修改、用戶授權(quán)、用戶欄目管理、查詢等)
用戶組管理(添加、刪除、修改、用戶組欄目授權(quán),欄目授權(quán)、查詢、用戶組人員添加查詢等)
用戶角色管理(添加、刪除、修改、用戶角色授權(quán)、用戶角色欄目信息查詢設(shè)置等)
2. ?文章管理:
欄目管理:查詢無限極欄目樹、創(chuàng)建無限極欄目樹分類(導(dǎo)航欄目、圖片列表欄目、文章列表欄目、文章內(nèi)容欄目等)、刪除、修改欄目信息。
文章管理:創(chuàng)建、刪除、修改文章,多維度文章查詢,包括已發(fā)布、未發(fā)布、所有文章等。文章富文本編輯器、文章多文件上傳、文章狀態(tài)控制等。
3.? 系統(tǒng)設(shè)置:
數(shù)據(jù)字典管理:支持中、英文信息,支持無限級別分類配置,動態(tài)控制是否可用等。
部門信息管理:支持中、英文無限級別部門信息增加,刪除,修改操作,部門列表、樹心查詢等。
日志管理:系統(tǒng)日志列表查詢、在線查看、在線下載等
路線管理:集成百度地圖API,提供線路查詢管理功能
Druid Monitor(監(jiān)控):集成阿里巴巴連接池,提供在線連接池監(jiān)控程序,包括:數(shù)據(jù)源、SQL監(jiān)控、URL監(jiān)控、Session監(jiān)控、Spring監(jiān)控等
網(wǎng)站信息管理:通過系統(tǒng)配置文件進(jìn)行網(wǎng)站內(nèi)容操作,包括郵件服務(wù)器配置、公司基本信息配置等。
4.集成REST服務(wù),可以用作獨立服務(wù)平臺(提供大量實例及測試平臺,包括:文件上傳下載、郵件短信發(fā)送、部門、產(chǎn)品、公共連接、我的收藏、我的任務(wù)、信息發(fā)布等)
5.? 集成Quartz調(diào)度,可以用作定時調(diào)度平臺(動態(tài)配置調(diào)度類、調(diào)度時間,使程序自動執(zhí)行某些業(yè)務(wù))
6.? Lucene搜索引擎,可以將文件資料索引化,支持文件內(nèi)容搜索、關(guān)鍵字搜索、高亮關(guān)鍵字等,使信息在毫秒內(nèi)提取查詢出來
7.? 用戶設(shè)置功能:包括修改用戶信息,修改密碼、發(fā)送消息,修改個人圖片,查看角色、查看用戶組,管理員修改角色、用戶、用戶組等。
8.? 集成Webservice平臺,包括jaxws服務(wù)、CXF框架,配置雙加密的權(quán)限認(rèn)證。使服務(wù)集成更加安全。
9.? Bootstrap html5提供了兩套前臺開環(huán)境,包括CMS和電子商務(wù)網(wǎng)站,使您的開發(fā)更加的簡潔。
技術(shù)點:
1.? Springmvc + Mybatis集成、SpringSecurity權(quán)限控制、Spring AOP事務(wù)處理。
2.? ?Wink Rest服務(wù)、Webservice服務(wù):jaxws、CXF等
3.? IO 流上傳下載文件,多線程操作
4.? 發(fā)送郵件,配置郵件服務(wù)器,發(fā)基于html、純文本格式的郵件
5.? MD5加密 (登陸密碼校驗加密等),用戶統(tǒng)一Session、Cookie管理,統(tǒng)一驗證碼校驗等。
6.? 數(shù)據(jù)庫連接池統(tǒng)一配置
7.? Quartz定時調(diào)度任務(wù)集成(直接通過配置即可)
8.? Httpclient破解驗證碼,登陸聯(lián)通充值平臺
9.? 漢字、英文拆分、可以用作文檔關(guān)鍵字搜索等。
10.? Base64圖片處理,支持PC,Android,IOS
11.? Service Socket?、Client Socket?通信技術(shù)(已經(jīng)做過GPRS數(shù)據(jù)獲取,并用到了項目中)
12.? 提供大量工具類,可以直接使用
13.? Maven項目構(gòu)建,您可以直接做架構(gòu),可以提升自己的學(xué)習(xí)能力,使您成為真正的架構(gòu)師。