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