spring Boot查詢數(shù)據(jù)分頁(yè)顯示的方法實(shí)例
springBoot所有依賴和配置文件都寫好的情況下
1、dao接口的實(shí)現(xiàn)方法
package com.cy.pj.sys.dao; import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import com.cy.pj.sys.pojo.SysLog; @Mapper public interface SysLogDao { /** * * @param username 查詢條件(例如查詢那個(gè)用戶的日志信息) * @return 總記錄數(shù)(基于這個(gè)結(jié)果可以計(jì)算總頁(yè)數(shù)) */ int getRowCount(@Param("username") String username); /** * * @param username 查詢條件(例如查詢那個(gè)用戶的日志信息) * @param startIndex 當(dāng)前頁(yè)的起始位置 * @param paInteger 當(dāng)前頁(yè)的頁(yè)面大小 * @return 當(dāng)前頁(yè)的日志記錄信息 * 數(shù)據(jù)庫(kù)中每條日志信息封裝到一個(gè)SysLog對(duì)象中 */ List<SysLog> findPageObjects( @Param("username")String username, @Param("startIndex")Integer startIndex, @Param("pageSize")Integer pageSize ); }
2、寫實(shí)現(xiàn)dao中Mapper的sql語句
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.cy.pj.sys.dao.SysLogDao"> <!-- sql元素用于對(duì)于sql語句共性的提取,需要的位置用<include>引入 --> <sql id="queryWhereId"> from sys_Logs <where> <if test="username!=null and username!=''"> username like concat('%',#{username},'%') <!-- concat 字符串的連接 --> </if> </where> </sql> <!-- 按條件統(tǒng)計(jì)記錄總數(shù) --> <select id="getRowCount" resultType="int"> select count(*) <include refid="queryWhereId"/> </select> <!-- 在映射文件中添加為id為 findPageObjects元素,,實(shí)現(xiàn)分頁(yè)查詢--> <select id="findPageObjects" resultType="com.cy.pj.sys.pojo.SysLog"> select * <include refid="queryWhereId"/> order by createdTime desc limit #{startIndex},#{pageSize} </select> </mapper>
3、寫pojo類對(duì)數(shù)據(jù)進(jìn)行封裝,所顯示的表字段的pojo類
3.1這里是SysLog
package com.cy.pj.sys.pojo; import java.io.Serializable; import java.util.Date; import lombok.Data; /** * 定義用于封裝日志信息的一個(gè)pojo對(duì)象,這樣的對(duì)象,在定義時(shí)要遵循一下規(guī)則 * 1)屬性盡量都用對(duì)象類型 * 2)提供無參數(shù)構(gòu)造函數(shù) * 3)提供set/get方法,boolean類型變量不能以is作為前綴 * 4)實(shí)現(xiàn)序列化接口并手動(dòng)添加序列化id(便于后續(xù)對(duì)此對(duì)象進(jìn)行序列化):在java中建議所有用于存儲(chǔ)數(shù)據(jù) 的對(duì)象都實(shí)現(xiàn) * FAQ? * 1)為什么要實(shí)現(xiàn)序列化接口 * 2)什么是序列化?(將對(duì)象轉(zhuǎn)化為字節(jié)) * 3)為什么要序列化?應(yīng)用在什么場(chǎng)景?(將數(shù)據(jù)持久化,或?qū)?shù)據(jù)存儲(chǔ)到緩存中) * 4)什么是反序列化?(將字節(jié)轉(zhuǎn)換為對(duì)象 * 5)如何序列化和反序列化 * 5.1)設(shè)計(jì)類是要實(shí)現(xiàn)序列化接口 * 5.2)構(gòu)建IO對(duì)象(ObjectOutputStream/ObjectinputStream) * 5.3)通過I/O對(duì)象進(jìn)行序列化和反序列化 * @author Administrator * */ @Data public class SysLog implements Serializable{ private static final long serialVersionUID = -1592163223057343412L; private Integer id; //用戶名 private String username; //用戶操作 private String operation; //請(qǐng)求方法 private String method; //請(qǐng)求參數(shù) private String params; //執(zhí)行時(shí)長(zhǎng)(毫秒) private Long time; //ip地址 private String ip; //創(chuàng)建時(shí)間 private Date createdTime; }
3.2對(duì)獲取的信息進(jìn)行封裝(獲取分頁(yè)信息的頁(yè)碼值、頁(yè)面大?。ň褪敲宽?yè)所顯示的記錄)、獲取的表總共記錄數(shù)、總頁(yè)數(shù) 、當(dāng)前記錄)
package com.cy.pj.sys.pojo; import java.util.List; import lombok.Data; /** * * @author PageObject 為業(yè)務(wù)封裝分業(yè)務(wù)相關(guān)數(shù)據(jù)的BO對(duì)象 * @param <T>參數(shù)化的類型(泛型) */ @Data public class PageObject<T> {//類名<泛型>:類泛型(這里的泛型用于約束類中的屬性,方法參數(shù),方法的返回值) /**當(dāng)前頁(yè)的頁(yè)碼值 */ private Integer pageCurrent=1; /**頁(yè)面大小*/ private Integer pageSize=3; /**總行數(shù)(通過查詢獲得)*/ private Integer rowCount=0; /**總頁(yè)數(shù)(通過計(jì)算獲得)*/ private Integer pageCount=0; /**當(dāng)前頁(yè)記錄*/ private List<T> records; }
3.3處理異常進(jìn)行封裝
package com.cy.pj.sys.pojo; public class JsonResult { /** * 狀態(tài)碼 */ private int state=1; /** * 狀態(tài)信息 */ private String message="ok"; /** * 正確數(shù)據(jù) */ private Object data; public JsonResult() { } public JsonResult(String message) { this.message = message; } public JsonResult(Object data) { this.data = data; } public JsonResult(Throwable t) { this.state=0; this.message=t.getMessage(); } public int getState() { return state; } public void setState(int state) { this.state = state; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } }
4、寫service接口
package com.cy.pj.sys.service; import com.cy.pj.sys.pojo.PageObject; import com.cy.pj.sys.pojo.SysLog; public interface SysLogService { PageObject<SysLog> findPageObject(String username,Integer pageCurrent); }
5、寫實(shí)現(xiàn)service接口的實(shí)現(xiàn)類
package com.cy.pj.sys.service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.cy.pj.sys.dao.SysLogDao; import com.cy.pj.sys.pojo.PageObject; import com.cy.pj.sys.pojo.SysLog; import com.cy.pj.sys.service.SysLogService; import om.cy.pj.common.exception.ServiceException; @Service public class SysLogServiceImpl implements SysLogService { @Autowired private SysLogDao sysLogDao; @Override public PageObject<SysLog> findPageObject(String username, Integer pageCurrent) { // 1.驗(yàn)證參數(shù)的合法性 // 1.1驗(yàn)證pageCurrent的合法性 // 不合法拋出IllegalArgumentException異常 if (pageCurrent == null || pageCurrent < 1) throw new IllegalArgumentException("當(dāng)前也顯示不正確"); // 基于條件查詢總記錄數(shù) // 2.1執(zhí)行查詢 int rowCount = sysLogDao.getRowCount(username); // 2.2驗(yàn)證查詢結(jié)果,假如結(jié)果為0不在執(zhí)行如下操作 if (rowCount == 0) throw new ServiceException("系統(tǒng)登錄沒有查到對(duì)應(yīng)的記錄"); // 3.基于條件查詢當(dāng)前頁(yè)記錄(pageSize定義為2) // 3.1)定義pageSize int pageSize = 2; //3.2計(jì)算startIndex int startIndex=(pageCurrent-1)*pageSize; //3.3執(zhí)行當(dāng)前數(shù)據(jù)的查詢操作 List<SysLog> records = sysLogDao.findPageObjects(username, startIndex, pageSize); //4.對(duì)分頁(yè)信息以及當(dāng)前頁(yè)記錄進(jìn)行封裝 //4.1 構(gòu)建PageObject對(duì)象 PageObject<SysLog> pageObject = new PageObject<>(); //4.2封裝數(shù)據(jù) pageObject.setPageCurrent(pageCurrent); pageObject.setPageSize(pageSize); pageObject.setRowCount(rowCount); pageObject.setRecords(records); pageObject.setPageCount((rowCount-1)/pageSize+1); //5.返回封裝結(jié)果 return pageObject; } }
5.自定義異常
package om.cy.pj.common.exception; public class ServiceException extends RuntimeException { public ServiceException() { super(); } public ServiceException(String message) { super(message); } public ServiceException(Throwable cause) { super(cause); } }
controller類
package om.cy.pj.common.exception; public class ServiceException extends RuntimeException { public ServiceException() { super(); } public ServiceException(String message) { super(message); } public ServiceException(Throwable cause) { super(cause); } }
html頁(yè)面和js寫的方法
數(shù)據(jù)顯示頁(yè)面的js編寫方法
<div id="pageId" class="box-footer clearfix" dm="100"></div> <!-- /.box-body --> </div> <!-- /.box --> </div> </div> <script type="text/javascript"> /* 分頁(yè)頁(yè)面加載完成,向服務(wù)端發(fā)起異步請(qǐng)求 */ $(function() { $("#pageId").load("doPageUI",function(){ doGetObjects(); }); }); /* 定義異步請(qǐng)求處理函數(shù), */ function doGetObjects(){ //1.定義url和參數(shù) var url = "doFindPageObjects"; var params={"pageCurrent":1}; //2.發(fā)起異步請(qǐng)求 //請(qǐng)問如下ajax請(qǐng)求的回調(diào)函數(shù)參數(shù)名可以是任意嗎?//可以,必須符合標(biāo)識(shí)符的規(guī)范 $.getJSON(url,params,function(result){ doHandleQueryResponseResult(result); });//特殊的ajax函數(shù) } function doHandleQueryResponseResult(result){ if(result.state==1){//ok //更新table中tbody內(nèi)部的數(shù)據(jù) doSetTableBodyRows(result.data.records);//將數(shù)據(jù)呈現(xiàn)在頁(yè)面上 /* //更新頁(yè)面page。html分頁(yè)數(shù)據(jù) */ doSetPagination(result.data); }else{ alert(result.message); } } function doSetTableBodyRows(records){ //1.獲取tBody對(duì)象,并清除對(duì)象 var tBody=$("#tbodyId"); tBody.empty(); //2.迭代records記錄,并將其內(nèi)容追加到tbody for(var i in records){ //2.1構(gòu)建tr對(duì)象 var tr=$("<tr></tr>"); //2.2構(gòu)建tds對(duì)象 var tds=doCreateTds(records[i]); //2.3將tds追加到tr中 tr.append(tds); //2.4將tr追加tbody中 tBody.append(tr); } } function doCreateTds(data){ var tds="<td><input type='checkbox' class='cBox' name='cItem' value='"+data.id+"'></td>" +"<td>"+data.username+"</td>" +"<td>"+data.operation+"</td>" +"<td>"+data.method+"</td>" +"<td>"+data.params+"</td>" +"<td>"+data.ip+"</td>" +"<td>"+data.time+"</td>"; return tds; } </script>
創(chuàng)建上下頁(yè)翻頁(yè)的按鈕HTML頁(yè) 以及js的編寫
<ul class="pagination pagination-sm no-margin pull-right"> <li><a class="first">首頁(yè)</a></li> <li><a class="pre">上一頁(yè)</a></li> <li><a class="next">下一頁(yè)</a></li> <li><a class="last">尾頁(yè)</a></li> <li><a class="rowCount">總記錄數(shù)(0)</a></li> <li><a class="pageCount">總頁(yè)數(shù)(0)</a></li> <li><a class="pageCurrent">當(dāng)前頁(yè)(0)</a></li> </ul> <script type="text/javascript"> function doSetPagination(page){ console.log("page",page) //1.初始化數(shù)據(jù) $(".rowCount").html("總記錄數(shù)("+page.rowCount+")"); $(".pageCount").html("總頁(yè)數(shù)("+page.pageCount+")"); $(".pageCurrent").html("當(dāng)前頁(yè)("+page.pageCurrent+")"); //2.綁定數(shù)據(jù)(為后續(xù)對(duì)此數(shù)據(jù)的使用提供服務(wù)) $("#pageId").data("pageCurrent",page.pageCurrent); $("#pageId").data("pageCount",page.pageCount); } $(function(){ //事件注冊(cè) $("#pageId").on("click",".first,.pre,.next,.last",doJumpToPage); }) function doJumpToPage(){ //1.獲取點(diǎn)擊對(duì)象的clss值 var cls=$(this).prop("class");//Property //2.基于點(diǎn)擊的對(duì)象執(zhí)行pageCurrent值得修改 //2.1獲取pageCurrent, pageCount的當(dāng)前值 var pageCurrent=$("#pageId").data("pageCurrent"); var pageCount=$("#pageId").data("pageCount"); //2.2修改pageCurrent的值 if(cls=="first"){//首頁(yè) pageCurrent=1; }else if(cls=="pre"&&pageCurrent>1){//上一頁(yè) pageCurrent--; }else if(cls=="next"&&pageCurrent<pageCount){//下一頁(yè) pageCurrent++; }else if(cls=="last"){//最后一頁(yè) pageCurrent=pageCount; }else{ return; } //3.對(duì)pageCurrent值進(jìn)行重新綁定 $("#pageId").data("pageCurrent",pageCurrent); //4.基于新的pageCurrent的值進(jìn)行當(dāng)前頁(yè)數(shù)據(jù)查詢 doGetObjects(); } function doGetObjects(){ //1.定義url和參數(shù) var url ="doFindPageObjects"; //data是從指定元素上獲取綁定的數(shù)據(jù) //數(shù)據(jù)會(huì)在何時(shí)進(jìn)行綁定?(setPagination,doQueryObjects) var pageCurrent = $("#pageId").data("pageCurrent"); //為什么要執(zhí)行如下判斷,然后初始化pageCurrent的值為1 //pageCurrent參數(shù)在沒有賦值的情況下,默認(rèn)初始值應(yīng)該為1. if(!pageCurrent) pageCurrent=1; var params={"pageCurrent":pageCurrent}; //2.發(fā)起異步請(qǐng)求 //請(qǐng)問如下ajax請(qǐng)求的回調(diào)函數(shù)參數(shù)名可以是任意的嗎??可以,必須符合標(biāo)識(shí)符的規(guī)范 $.getJSON(url,params,function(result){ //請(qǐng)問result是一個(gè)字符串還是json格式的js對(duì)象? 答:json格式對(duì)象 doHandleQueryResponseResult(result); }); }//特殊的ajax函數(shù) </script>~~~~
總結(jié)
到此這篇關(guān)于spring Boot查詢數(shù)據(jù)分頁(yè)顯示的文章就介紹到這了,更多相關(guān)springBoot查詢數(shù)據(jù)分頁(yè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java調(diào)用openoffice將office系列文檔轉(zhuǎn)換為PDF的示例方法
本篇文章主要介紹了java使用openoffice將office系列文檔轉(zhuǎn)換為PDF的示例方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-11-11Java 在Excel單元格中應(yīng)用一種/多種字體樣式(實(shí)例代碼)
這篇文章主要介紹了Java 在Excel單元格中應(yīng)用一種/多種字體樣式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12Java排序算法三之歸并排序的遞歸與非遞歸的實(shí)現(xiàn)示例解析
這篇文章主要介紹了Java排序算法三之歸并排序的遞歸與非遞歸的實(shí)現(xiàn)示例解析,文章通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08SpringBoot整合SpringSecurity和JWT和Redis實(shí)現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證
Spring Security是一個(gè)可以為Java應(yīng)用程序提供全面安全服務(wù)的框架,同時(shí)它也可以輕松擴(kuò)展以滿足自定義需求,本文主要介紹了SpringBoot整合SpringSecurity和JWT和Redis實(shí)現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證,感興趣的可以了解一下2023-11-11Spring中的SpringApplicationRunListener詳細(xì)解析
這篇文章主要介紹了Spring中的SpringApplicationRunListener詳細(xì)解析,SpringApplicationRunListener是一個(gè)監(jiān)聽SpringApplication中run方法的接口,在項(xiàng)目啟動(dòng)過程的各個(gè)階段進(jìn)行事件的發(fā)布,需要的朋友可以參考下2023-11-11intellij idea中安裝、配置mybatis插件Free Mybatis plugin的教程詳解
這篇文章主要介紹了intellij idea中安裝、配置mybatis插件Free Mybatis plugin的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09在java List中進(jìn)行模糊查詢的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄趈ava List中進(jìn)行模糊查詢的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11-
最新評(píng)論