Hay dos métodos de implementación de paginación comunes:
1. Modifique SQL cada vez que gira la página, pase los parámetros relevantes a SQL y vaya a la base de datos para conocer los datos de la página en tiempo real y mostrarlo.
2. Encuentre todos los datos en una determinada tabla en la base de datos, y luego obtenga y muestre ciertos datos procesándolo en la lógica de negocios.
Para un sistema de gestión simple con una pequeña cantidad de datos, el primer método de implementación es relativamente fácil de usar menos código para implementar la función de la paginación. Este artículo también le presenta este método:
Fragmento de código:
1. Page.java
paquete com.cm.contract.common; importar org.apache.commons.lang.stringutils; importar org.apache.commons.lang.builder.ToStringBuilder; / ** Clase de paginación*@author fengwei*@Date 2016-5-23*/ Public Class Page implementa java.io.Serializable {private static final long SerialVersionUid = 1l; // Página anterior Private Boolean HasPrepage; // La siguiente página Private Boolean HasnextPage; // cuántos elementos se muestran por página: predeterminado 20 privado larga cada página = 20L; // Número total de páginas Popa total privada; // La página actual: Página predeterminada 1 Private Long CurrentPage = 1L; // Iniciar subíndice Private Long BeginDinx; // End subíndice Private Long EndinIndex; // cuántas cuenta total privada de total; // Nombre de la columna de clasificación de la cadena privada sortname; // Estado de clasificación de cadena privada sortState; // Clasificación de información Private String SortInfo; // clasificar si se debe clasificar privado boolean sort = false; cadena privada defaultInfo = ""; public String 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 () {} / *** Comúnmente usado, utilizado para calcular la paginación** / página pública (Long TotalRecords) {this.totalCount = TotalRecords; settotalPage (getTotalPage (totalrecords)); } / ** * use * Al configurar cuántas entradas se muestran en cada página * * / página pública (larga cada página, larga totalización total) {this.everypage = Everypage; this.totalCount = TotalRecords; settotalPage (getTotalPage (totalrecords)); } / *** @Param State State Code* @param Value cuántas páginas ir o establecer cuántos elementos se muestran por página o se ordene como un nombre de columna de clasificación* / public void pagestate (int index, string value) {sort = false; switch (índice) {caso 0: seteverypage (long.parselong (valor)); break; Caso 1: primero (); ruptura; Caso 2: anterior (); ruptura; Caso 3: Next (); Break; Caso 4: Last (); Break; caso 5: sort = true; sort (valor); ruptura; caso 6: // a la página especificada setCurrentPage (long.parselong (valor)); romper; }} / *** página anterior* / private void primero () {currentPage = 1l; } private void anterior () {CurrentPage--; } private void next () {currentPage ++; } private void last () {currentPage = totalPage; } private void sort (string sortName) {// Establezca el estado de clasificación setPageStState (sortName); } / *** Calcule el número total de páginas** / Private Long GetTotalPage (Long TotalRecords) {Long TotalPage = 0l; Everypage = Everypage == nulo? 10L: todas las páginas; if (TotalRecords % EveryPage == 0) TotalPage = TotalRecords / EveryPage; else {TotalPage = TotalRecords / EveryPage + 1; } return TotalPage; } public Long getBeginIndex () {this.beginIndex = (currentPage - 1) * EveryPage; devolver esto.beginIndex; } public void setBeginIndex (Long BeginIndex) {this.beginIndex = beginIndex; } public Long GetCurrentPage () {this.CurrentPage = currentPage == 0? 1: CurrentPage; devolver esto. CurrentPage; } public void setCurrentPage (Long CurrentPage) {if (0 == currentPage) {currentPage = 1l; } this.CurrentPage = currentPage; } public Long Long GeteveryPage () {this.everyPage = EveryPage == 0? 10: todas las páginas; Devuelve esto. } public void seteverypage (larga todas las páginas) {this.everypage = Everypage; } public boolean gethasNextPage () {this.hasNextPage = (currentPage! = TotalPage) && (TotalPage! = 0); devolver esto.hasnextPage; } public void sethasnextPage (boolean HasnextPage) {this.hasNextPage = HasNextPage; } public boolean gethAsprepage () {this.hasprepage = currentPage! = 1; devolver esto.hasprepage; } public void sethasprepage (boolean Hasprepage) {this.hasprepage = Hasprepage; } public Long getTotalPage () {return this.totalPage; } public void settotalPage (Long 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); } /*** Establezca el estado de clasificación** /private void setPageSortState (String newPageSortName) {// juzga si el campo de clasificación anterior está vacío if (stringUtils.isEmpty (sortName)) {// La clasificación predeterminada es orden ascendente esto.sortState = pageUtil.asc; this.sortinfo = pageUtil.page_asc; } else {if (stringUtils.equalSignorEcase (newPageSortName, sortName)) {// juzga el valor de estado de clasificación de 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 {// predeterminado this.sortState = pageUtil.asc; this.sortinfo = pageUtil.page_asc; }} sortName = newPageSortName.TOLOWERCase (); } public boolean issort () {sort de retorno; } public void setSort (boolean sort) {this.sort = sort; } public Long Long getendinIndex () {this.endinIndex = (currentPage) * EveryPage; return endinindex; } public void setendinIndex (largo endinindex) {this.endinIndex = endinindex; }} 2.Pagestate.java
paquete com.cm.contract.common; importar org.apache.commons.lang.stringutils; /**Pagination status class* @author FENGWEI * @date 2016-5-23 */ public enum PageState { /** * Set how many pieces to display per page* */ SETPAGE, /** * Home page* */ FIRST, /** * Previous page* */ PREVIOUS, /** * Back page* */ NEXT, /** * Last page* */ LAST, /** * Sort* */ SORT, /** * How many pages para ir * */ gopage; / *** @param Nombre del índice de valor* @return Índice índice índice índice índice*/ public static int getordinal (valor de cadena) {int index = -1; if (stringUtils.isEmpty (valor)) {índice de retorno; } String newValue = StringUtils.trim (valor) .ToUpperCase (); intente {index = valueOf (newValue) .ordinal (); } catch (ilegalArgumentException e) {} Index de retorno; }} 3.Pageutil.java
/ ** * Clase de herramientas de paginación * @author fengwei * @date 2016-5-23 */ public class PageUtil {public static final String asc = "asc"; Public static final String desc = "Desc"; Public static final String page_Desc = "↓"; Public static final String page_asc = "↑"; Public static final String page_null = ""; public static final String session_page_key = "página"; / *** Inicializa la clase de paginación* @param initPagesql consultas no parchadas sql* @param total numero total de filas* @param Índice Paging estado* @param Valor Solo cuando se muestran cuántas piezas se muestran por página, el valor no será nulo, los otros son nulos*/ public estática en la página (página total (Índice total, Índice intenso, valor de cadena, página de página de página) {página nulo = página null; if (index <0) {página = nueva página (totalCount); } else { / ** ¿Cuántas piezas se muestran por página* / Long EverPage = null == valor? 10: long.parselong (valor); / ** Obtenga la clase de paginación en sesión para facilitar el guardar el estado de la página de la página*/ página = sessionPage; Page.SeteveryPage (EverPage); Page.SettotalCount (TotalCount); } página de retorno; } / *** Cuando la página hace clic: página de inicio, página anterior, página siguiente, última página, ordenación y el número de página en el número de página* @param Índice Paging Status* @param Value Nombre de campo de clasificación o número de página en el número de página* / Public Static Page Execpage (int index, value de cadena, página de sesión) {página de página = página de sesión; / ** Método de llamada para el cálculo de la paginación*/ page.pagestate (índice, valor); página de regreso; }} 4.DefaultController.java Esta parte se puede usar de manera flexible
paquete com.cm.contract.common; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import javax.servlet.http.httpsession; importar org.springframework.web.bind.annotation.modelattribute; /** * Extraer la solicitud pública y el título de respuesta: Default Controller Descripción: * * @author fengwei * @Date 2016-5-6 3:30:32 PM * /clase pública El Controlador Default { /** * ¡La clase de oración de Pagination de tres capas realiza el cálculo de la paginación antes de mostrar los datos! * * @param Querysql * La instrucción SQL de consulta, no paginada * @param TotalCount * El número total de entradas obtenidas en función de la consulta sql * @param columnnamedescorasc * Nombre de columna + método de clasificación: id descuDi } / ** Estado de la página, este estado se crea en la página y no tiene nada que ver con Business* / String Pageaction = request.getParameter ("Pageaction"); Valor de cadena = request.getParameter ("PageKey"); / ** Obtenga un índice para juzgar el estado de la página*/ int index = Pagestate.getordinal (pageaction); Página página = nulo; / ** * ÍNDICE <1 Solo hay dos estados 1 Cuando la primera llamada, no hay valor en la página de estado de la página, la clase NULL return -1 2 Cuando la página establece cuántas piezas se muestran por página: * índice = 0, cuando hay muchas piezas que se muestran por página, la clase de página debe ser recalculada * */ página sesionpage = getpage (solicitud); if (index <1) {page = pageUtil.InintPage (totalCount, index, value, sessionPage); } else {page = pageUtil.execpage (índice, valor, sessionPage); } setSession (solicitud, página); página de regreso; } Página privada getPage (httpservletrequest request) {página página = (página) request.getSession (). getAttribute (pageUtil.session_page_key); if (page == null) {page = new Page (); } página de retorno; } private void setSession (httpservletRequest solicitud, página de página) {request.getSession (). setAttribute (pageUtil.session_page_key, página); }} Cómo usar:
5. Controlador.java
/ *** Las condiciones de paginación agregadas por el modelo* El método ExecTepage se escribe en la clase de herramienta* @param modelo*/ @Controller public class CmlogController extiende defaultController {@RequestMapping ("index.do") public ModelandView UserInTo (modelo ModelMap, cadena UserName) {namestr = usame; Model.addattribute ("Nombre de usuario", Namestr); // Número de páginas Long TotalCount = logService.pageCounts (modelo); // Page Play Page = ExecutePage (Solicitud, 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 = new ModelAndView (); // Pagination Query logList = logService.pageList (modelo); MV.AdDObject ("LogList", LogList); mv.setViewName ("/jsp/log"); regresar MV; }} 6. Varias declaraciones de consulta en Maybatis
// consulta de paginación <select id = "pageList" parametertype = "map" resultMap = "BaseResultMap"> select ttt.* Desde (seleccione tt.*, ROWNUM rn de (select* de cm_log <where> <if test = "username! = Null y username! = ''"> <!- un recuerdo especial es que $ es un $ es un sting sting sting sting splticing spLEning spLEnting spLAning spLEnting spLEnting spLEnting spLEnting splicing, debe ser un cuidados, ya que debe ser cuidadoso, ya que debe ser cuidadoso. Inyección de SQL. # --> AND TYPE = #{type,jdbcType=VARCHAR} </if> </where> order by ${orderName} ${descAsc} )tt)ttt <where> <if test="startIndex != null and startIndex != ''"> rn > ${startIndex} </if> <if test="endIndex != null and endIndex != ''"> < '%$ {nombre de usuario}%' </if> </where> </select> 7. índice de página de recepción.jsp
// Simplemente agregue el DIV en el diseño de la página // nombre de usuario como condición // <jsp: param name = "url" value = "/log/index.do?"/> El signo de interrogación sin condición debe existir <cuerpo> <div align = "right" style = "altura: 20"> <jsp: incluir página = "/jsp/página.jsp"> <jsp: param name = "url" valor = "/log/index.do? UserName = $ {UserName}"/> </jsp: incluir> </div> </body> 8. Page.jsp referenciado
<%@ page lenguaje = "java" contentType = "text/html; charset = utf-8" PageEncoding = "utf-8"%> <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%> <c: set var = "valle" value = "$ {sessions <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" valor = "$ {path} /$ {url}" /> <tr> <td colspan = "5"> $ {urlParams} total $ {page.totalCount} registra total $ {page.totalpage} páginas por página show $ {page.everypage} actualmente el $ {page.current} página <c: Choos <c: Choos test = "$ {page.hasprepage eq false}"> << homePage <Prepage </c: when> <c: lo contrario> <a href = "$ {pathUrl} & pageaction = first $ {urlParams}"> << homePage </a> <a href = "$ {pathUrl} & pageAction /> <Página anterior </a> </c: de lo contrario> </c: elegir> || <c: elegir> <c: when test = "$ {page.hasnextPage eq false}"> Página siguiente> Última página >> </c: when> <c: de lo contrario> <a href = "$ {pathurl} & pageaction = next $ {urlparams}"> página siguiente> </a> <a href = "$ {pathUrl} & pageaction = Last $ {urlParams}"> Última página >> </a> </c: otra cosa> </c: elegir> <select name = "indexChange" id = "indexChange" onchange = "getCurrentPage (this.value);"> <c: foreach var = "index" inicio = "1" end = "$" $ {página {página {page. step = "1"> <option value = "$ {index}" $ {page.CurrentPage EQ Index? "Seleccionado": ""}> $ {index} página </opción> </c: foreach> </select> visual valor = "$ {pageCount}" $ {page.everypage eq pageCount? "Seleccionado": ""}> $ {PageCount} Bar </option> </c: foreach> </elect> </td> </td> </tr> <div style = 'display: none'> <a class = listLink id = "indexpagehref" href = '#'> </a> </div> <script> function getCurrentPage (índice) {VAR AT = {VAR AT = {VAR AT = {VAR AT = {VAR AT = {VAR AT = {VAR AT = {VAR AT = {VAR AT = {VAR AT = {VAR AT = {VAR AT = {VAR AT = {VAR AT = {VAR AT = {VAR AT = {VAR AT = {VAR AT = {VAR AT) document.getElementById ("indexpagehref"); a.href = '$ {pathurl} & pageaction = gopage & pagey ='+index+'$ {urlParams}'; A.SetAttribute ("OnClick", ''); A. Haga clic ("Return False"); } función setEveryPage (EveryPage) {var a = document.getElementById ("indesexpagehref"); var currentPage = document.getElementById ('indexChange'). valor; a.href = '$ {pathUrl} & pageaction = setPage & pageKey ='+EveryPage+'$ {urlParams}'; A.SetAttribute ("OnClick", ''); A. Haga clic ("Return False"); } function sortPage (sortName) {var a = document.getElementById ("indexpagehref"); a.href = '$ {pathurl} & pageaction = sorts & pagekey ='+sortName+'$ {urlParams}'; A.SetAttribute ("OnClick", ''); A. Haga clic ("Return False"); } </script>Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.