두 가지 일반적인 페이징 구현 방법이 있습니다.
1. 페이지를 돌릴 때마다 SQL을 수정하고 관련 매개 변수를 SQL로 전달한 다음 데이터베이스로 이동하여 페이지의 데이터를 실시간으로 찾아 표시합니다.
2. 데이터베이스의 특정 테이블에서 모든 데이터를 찾은 다음 비즈니스 로직에서 처리하여 특정 데이터를 얻고 표시합니다.
소량의 데이터가있는 간단한 관리 시스템의 경우 첫 번째 구현 방법은 페이징 기능을 구현하기 위해 코드를 적게 사용하기가 비교적 쉽습니다. 이 기사는 또한이 방법을 귀하에게 소개합니다.
코드 스 니펫 :
1. Page.java
패키지 com.cm.contract.common; import org.apache.commons.lang.stringutils; import org.apache.commons.lang.builder.tostringbuilder; / ** Pagination Class*@Author Fengwei*@Date 2016-5-23*/ Public Class Page Ampess Java.io.serializable {private static final long serialversionuid = 1L; // previous page private boolean hasprepage; // 다음 페이지 개인 부울 hasnextPage; // 페이지 당 표시되는 항목 수 : 기본 20 개인 길이 EveryPage = 20L; // 총 페이지 수 개인 긴 총 페이지; // 현재 페이지 : 기본 페이지 1 Private Long CurrentPage = 1L; // start subscript private long beginIndex; // 엔드 첨자 프라이빗 롱 엔디 니덱스; // 얼마나 많은 비공개 긴 총 카운트; // 열 이름 정렬 개인 문자열 정렬 이름; // 상태 정렬 상태 개인 문자열 sortstate; // 정보 정렬 개인 문자열 sortInfo; // 개인 부울 정렬을 정렬할지 정렬 = false; 개인 문자열 defaultInfo = ""; 공개 문자열 getDefaultInfo () {return defaultInfo; } public void setDefaultInfo (String defaultInfo) {this.defaultInfo = defaultInfo; } public String getSortInfo () {return sortInfo; } public void setSortInfo (String SortInfo) {this.sortinfo = sortInfo; } public String getSortName () {return sortname; } public void setSortName (String SortName) {setPagesOrtState (SortName); } public String getSortState () {return sortstate; } public void setSortstate (String Sortstate) {this.sortstate = sortstate; } public page () {} / *** 일반적으로 사용되며 페이징* / public page (Long TotalRecords) {this.totalCount = TotalRecords; settoTalpage (getTotalPage (TotalRecords)); } / ** * 사용 * 각 페이지에 몇 개의 항목 수를 설정할 때 * / public page (긴 모든 페이지, 긴 총 레코드) {this.everypage = EveryPage; this.totalCount = TotalRecords; settoTalpage (getTotalPage (TotalRecords)); } / *** @param 상태 상태 코드* @param 값 페이지 당 이동 또는 정렬 열 이름으로 표시 할 항목 수를 설정하거나 정렬 열 이름으로 정렬 할 수있는 수 (int index, String value) {sort = false; 스위치 (인덱스) {case 0 : seteverypage (long.parselong (value)); break; 사례 1 : 첫 번째 (); break; 사례 2 : previous (); break; 사례 3 : 다음 (); break; 사례 4 : last (); Break; 사례 5 : sort = true; sort (value); break; 사례 6 : // 지정된 페이지에 대한 setCurrentPage (long.parselong (value)); 부서지다; }} / *** 이전 페이지* / private void first () {currentPage = 1L; } private void previous () {currentPage--; } private void next () {currentPage ++; } private void last () {currentPage = TotalPage; } private void sort (String SortName) {// 정렬 상태 setPagesOrtState (SortName)를 설정합니다. } / *** 총 페이지 수를 계산** / private long gettotalpage (긴 총 레코드) {긴 총 페이지 = 0l; EveryPage = EveryPage == NULL? 10L : 모든 페이지; if (TotalRecords % EveryPage == 0) TotalPage = TotalRecords / EveryPage; else {TotalPage = TotalRecords / EveryPage + 1; } return totalpage; } public long getbeginindex () {this.beginindex = (currentPage -1) * EveryPage; 이것을 반환하십시오 .BeginIndex; } public void setBeginIndex (long beginindex) {this.beginindex = beginIndex; } public long getCurrentPage () {this.currentPage = currentPage == 0? 1 : CurrentPage; this.currentpage; } public void setCurrentPage (long currentPage) {if (0 == currentPage) {currentPage = 1L; } this.currentPage = currentPage; } public long geteverypage () {this.everypage = EveryPage == 0? 10 : 모든 페이지; 이것을 반환하십시오. } public void seteverypage (긴 모든 페이지) {this.everypage = EveryPage; } public boolean gethasnextpage () {this.hasnextPage = (currentPage! = TotalPage) && (TotalPage! = 0); hasnextpage; } public void sethasnextpage (boolean hasnextPage) {this.hasnextPage = hasnextPage; } public boolean gethasprepage () {this.hasprepage = currentPage! = 1; hasprepage; } public void sethasprepage (boolean hasprepage) {this.hasprepage = hasprepage; } public long getTotalPage () {return this.totalPage; } public void settoTalpage (긴 TotalPage) {if (this.currentPage> TotalPage) {this.currentPage = TotalPage; } this.totalPage = TotalPage; } public long getTotalCount () {return this.totalCount; } public void settotalCount (Long TotalCount) {settotalPage (getTotalPage (TotalCount)); this.totalCount = TotalCount; } @override public String toString () {return tostringBuilder.ReflectionToString (this); } /*** 정렬 상태를 설정** /private void setPagesortState (String NewPagesOrtName) {// 이전 정렬 필드가 비어있는 경우 (stringUtils.isempty (sortName)) {// 기본 정렬은 오름차순입니다. this.sortinfo = pageutil.page_asc; } else {if (stringUtils.equalsIgnoreCase (newPagesOrtName, SortName)) {// SortState 정렬 상태 값을 판단합니다. if (stringUtils.equalSignoreCase (SortState, PageUtil.Asc))) {this.SortState = pageUtil.desc; this.sortinfo = pageutil.page_desc; } else {this.sortstate = pageutil.asc; this.sortinfo = pageutil.page_asc; }} else {// default this.sortstate = pageutil.asc; this.sortinfo = pageutil.page_asc; }} sortname = newPagesOrtName.TOLOWERCASE (); } public boolean issort () {return sort; } public void setSort (부울 정렬) {this.sort = sort; } public long getendinIndex () {this.endinIndex = (currentPage) * EveryPage; endinindex 리턴; } public void setendinIndex (long endinindex) {this.endinindex = endinindex; }} 2.Pagestate.java
패키지 com.cm.contract.common; import org.apache.commons.lang.stringutils; /** Pagination Status Class* @author fengwei* @date 2016-5-23* /public enum pagestate { /*** 페이지 당 표시 할 조각 설정* /setPage, /*** 홈 페이지* /첫 페이지* /이전 페이지* /previous, /*** 뒷 페이지* /*** 마지막 페이지* /****** /sort* /sort */ gopage; / *** @param 값 색인 이름* @return 리턴 인덱스 인덱스 인덱스 인덱스 색인*/ public static int getordinal (문자열 값) {int index = -1; if (stringUtils.isempty (value)) {return index; } string newValue = StringUtils.trim (value) .toupperCase (); try {index = valueof (newValue) .ordinal (); } catch (delegalargumentexception e) {} return index; }} 3.pageutil.java
/ ** * Pagination Tool Class * @author fengwei * @date 2016-5-23 */ public class pageutil {public static final string asc = "asc"; 공개 정적 최종 문자열 desc = "desc"; 공개 정적 최종 문자열 page_desc = "↓"; 공개 정적 최종 문자열 page_asc = "↑"; 공개 정적 최종 문자열 page_null = ""; public static final string session_page_key = "page"; / *** 페이징 클래스 초기화* @param initpagesql unpatched query sql* @param totalcount 총 행 수* @param 인덱스 페이징 상태* @param value 페이지 당 표시되는 조각 수를 설정할 때만 값은 null이지 않으며 다른 값은 null*/ public static page inintger value, page page page page page page page vales a public page입니다. if (index <0) {page = 새 페이지 (TotalCount); } else { / ** 페이지 당 얼마나 많은 조각이 표시됩니까* / Long Everpage = null == value? 10 : long.parselong (값); / ** 페이지 페이징 상태 저장을 용이하게하기 위해 페이징 클래스를 세션에서 가져옵니다.*/ page = sessionpage; Page.SeteveryPage (EverPage); page.setTotalCount (TotalCount); } 반환 페이지; } / *** 페이지를 클릭 할 때 : 홈페이지, 이전 페이지, 다음 페이지, 마지막 페이지, 마지막 페이지, 정렬 및 페이지 번호를 페이지 번호* @param value 정렬 필드 이름 또는 페이지 번호에 페이지 번호* / public static page execpage (int index, string value, page sessionpage) {page page = sessionpage; / ** 페이징 계산을위한 호출 방법*/ page.pagestate (색인, 값); 반환 페이지; }} 4. DefaultController.java이 부분은 유연하게 사용할 수 있습니다
패키지 com.cm.contract.common; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; org.springframework.web.bind.annotation.modelattribute; /** * 공개 요청 및 응답 추출 제목 : DefaultController 설명 : * * @author fengwei * @date 2016-5-6 3:30:32 PM * /public class defaultController { /** * 3 층간 페이지 매김 문장 클래스 데이터를 표시하기 전에 Pagination Calculation을 수행합니다! * * @param querysql * query sql statement, paginated * @param totalcount * 쿼리 sql * @param columnnamedescorasc * 열 이름 + 정렬 메소드 : id desc 또는 asc */ protected page executepage (httpervletrequest, long totalcount) {null = 0 = {null = {null = {null = 0. } / ** 페이지 상태,이 상태는 페이지에 구축되며 비즈니스* / String pageAction = request.getParameter ( "pageAction")와 관련이 없습니다. 문자열 값 = request.getParameter ( "pagekey"); / ** 페이지 상태 상태를 판단하기 위해 색인을 가져옵니다*/ int index = pagestate.getordinal (pageAction); 페이지 페이지 = null; / ** * index <1 두 상태 만 있습니다. 1 첫 번째 호출이있을 때 페이지 상태 클래스에 값이 없습니다. if (index <1) {page = pageutil.inintPage (TotalCount, Index, Value, SessionPage); } else {page = pageutil.execpage (색인, 값, 세션 페이지); } setSession (요청, 페이지); 반환 페이지; } private page getPage (httpservletRequest request) {page page = (page) request.getSession (). getAttribute (pageUtil.session_page_key); if (page == null) {page = new Page (); } 반환 페이지; } private void setsession (httpservletrequest 요청, 페이지 페이지) {request.getSession (). setAttribute (pageUtil.session_page_key, page); }} 사용 방법 :
5. Controller.java
/ *** 모델별로 추가 된 페이징 조건* executePage 메소드는 도구 클래스에 작성됩니다* @param model*/ @controller public class cmlogcontroller 확장 기본 콘트롤러 {@requestmapping ( "index.do") public modelandview userInto (ModelMap Model, String UserName) {namest = username; model.addattribute ( "사용자 이름", namest); // 페이지 수 긴 TotalCount = logservice.pagecounts (model); // 페이지 표시 페이지 = ExecutePage (요청, TotalCount); if (page.issort ()) {model.put ( "ordername", page.getSortName ()); model.put ( "descasc", page.getSortState ()); } else {model.put ( "ordername", "logtime"); model.put ( "descasc", "desc"); } model.put ( "startIndex", page.getBeginIndex ()); model.put ( "endindex", page.getendinIndex ()); ModelAndView MV = 새로운 ModelAndView (); // Pagination query loglist = logservice.pagelist (model); mv.addoBject ( "loglist", loglist); mv.setViewName ( "/jsp/log"); 리턴 MV; }} 6. Maybatis의 몇 가지 쿼리 진술
// Pagination Query <select id = "pagelist"parametertype = "map"resultmap = "baseresultmap"> ttt.*에서 (select tt.*, rownum rn from (select* from cm_log <where> <if test> <username! = null and username! = '' "> <! <! SQL Injection. SQL 주입 : $, SQL을 디버깅하기에 편리합니다. #-> 및 '%$ {username}%'</if> <test = "type! = null and type! = ''"> <!과 같은 사용자 이름은 현악기에 대한 특별한 알림입니다. # -> and type = # {type, jdbctype = varchar} </if> </where> $ {ordername} $ {descasc}) tt) ttt <where> <if test = "startIndex! = null and startIndex! = '> rn> $ {startIndex} </if> if test = null 및 endind! <! '%$ {username}%'</if> </where> </select> 7. 프론트 데스크 페이지 index.jsp
// 페이지 레이아웃에서 div를 조건으로 추가하기 // <jsp : param name = "url"value = "/log/index.do?"/> 조건이없는 물음표는 존재해야합니다 <body> <div align = "right"style = "height : 20"> <jsp : 포함 page = "/jsp/page.jsp"> <jsp : "url" value = "/log/index.do? username = $ {username}"/> </jsp : 포함> </div> </body> 8. Page.jsp 참조
<%@ page language = "java"contmenttype = "text/html; charset = utf-8"pageencoding = "utf-8"%> <%@ taglib prefix = "c"uri = "http://java.sun.com/jsp/jstl/core"%> <c : set vals = "page" "$ {sessionscope. <c : set var = "path"value = "$ {pagecontext.request.contextpath}" /> <c : set var = "url"value = "$ {param.url}" /> <c : set var = "urlparams"value = "$ {param.urlparams}" /> <c : set var = "pathurl" value = "$ {path} /$ {url}" /> <tr> <td colspan = "5"> $ {urlparams} 총 $ {page.totalcount} 기록 총 $ {page.totalpage} 페이지 당 페이지 당 $ {page.everypage} 현재 $ {page.currentpage} 페이지를 표시합니다. test = "$ {page.hasprepage eq false}"> << 홈페이지 <profage </c : when> <c : <c : el- a href = "$ {pathurl} & pageAction = first $ {urlparams}"> << homepage </a> <a href = "$ {pathurl} & pageaction = prevery $ {urllparam} 페이지 </a> </c : 그렇지 않으면> </c : 선택> || <c : 선택> <c : test = "$ {page.hasnextPage eq false}"> 다음 페이지> 마지막 페이지 >> </c : when> <c : 그렇지 않으면> <a href = "$ {pathurl} & pageAction = next $ {urlparams}"> next Page> </a> <a. href = "$ {pathurl} & pageaction = last $ {urlparams}"> 마지막 페이지 >> </a> </c : 그렇지 않으면> </c : 선택> <선택 name = "indexchange"id = "indexchange"onchange = "getCurrentPage (this.value);"> index = ""1 " end = "$ {page.totalpage}"step = "1"> <옵션 값 = "$ {index}"$ {page.currentPage eq index? "selected": ""}> $ {index} page </옵션> </c : foreach> </select> 페이지 당 표시 : <select name = "everypage"id = "everypage"onchange = "seteverypage (this.value);"> <c : foreach var = "pagecount"시작 = "5"{page. value = "$ {pagecount}"$ {page.everypage eq pagecount? "selected": ""}> $ {pagecount} bar </옵션> </c : foreach> </select> </td> </td> </tr> <div style = 'display : none'> <a class = listlink id = "indexpagehref"href = '#'> </a> </div> <script> 함수 getcurr a = index a =. document.getElementById ( "indexPageHref"); a.href = '$ {pathurl} & pageaction = gopage & pagekey ='+index+'$ {urlparams}'; A.SetAttribute ( "OnClick", ''); A.Click ( "Return False"); } 함수 seteveryPage (EveryPage) {var a = document.getElementById ( "indexPageHref"); var currentPage = document.getElementById ( 'IndexChange'). 값; 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"); } </스크립트>위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.