一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - spring Boot查詢數據分頁顯示的方法實例

spring Boot查詢數據分頁顯示的方法實例

2020-08-13 15:43Tony猿 Java教程

這篇文章主要給大家介紹了關于spring Boot查詢數據分頁顯示的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用spring Boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

springBoot所有依賴和配置文件都寫好的情況下

1、dao接口的實現方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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語句

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?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>
 <!-- 按條件統計記錄總數 -->
 <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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.cy.pj.sys.pojo;
import java.io.Serializable;
import java.util.Date;
 
import lombok.Data;
/**
 * 定義用于封裝日志信息的一個pojo對象,這樣的對象,在定義時要遵循一下規則
 * 1)屬性盡量都用對象類型
 * 2)提供無參數構造函數
 * 3)提供set/get方法,boolean類型變量不能以is作為前綴
 * 4)實現序列化接口并手動添加序列化id(便于后續對此對象進行序列化):在java中建議所有用于存儲數據 的對象都實現
 * FAQ?
 * 1)為什么要實現序列化接口
 * 2)什么是序列化?(將對象轉化為字節)
 * 3)為什么要序列化?應用在什么場景?(將數據持久化,或將數據存儲到緩存中)
 * 4)什么是反序列化?(將字節轉換為對象
 * 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;
//執行時長(毫秒)
private Long time;
//ip地址
private String ip;
//創建時間
private Date createdTime;
}

3.2對獲取的信息進行封裝(獲取分頁信息的頁碼值、頁面大小(就是每頁所顯示的記錄)、獲取的表總共記錄數、總頁數 、當前記錄)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.cy.pj.sys.pojo;
 
import java.util.List;
 
import lombok.Data;
/**
 *
 * @author PageObject 為業務封裝分業務相關數據的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處理異常進行封裝

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.cy.pj.sys.pojo;
 
public class JsonResult {
 /**
  * 狀態碼
  */
private int state=1;
/**
 * 狀態信息
 */
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接口

?
1
2
3
4
5
6
7
8
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接口的實現類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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執行查詢
  int rowCount = sysLogDao.getRowCount(username);
  // 2.2驗證查詢結果,假如結果為0不在執行如下操作
  if (rowCount == 0)
 
   throw new ServiceException("系統登錄沒有查到對應的記錄");
  // 3.基于條件查詢當前頁記錄(pageSize定義為2)
  // 3.1)定義pageSize
  int pageSize = 2;
  //3.2計算startIndex
  int startIndex=(pageCurrent-1)*pageSize;
  //3.3執行當前數據的查詢操作
  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.自定義異常

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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編寫方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<div id="pageId" class="box-footer clearfix" dm="100"></div>
   <!-- /.box-body -->
  </div>
  <!-- /.box -->
 </div>
</div>
<script type="text/javascript">
/* 分頁頁面加載完成,向服務端發起異步請求 */
 $(function() {
  $("#pageId").load("doPageUI",function(){
   doGetObjects();
  });
 });
 
 /* 定義異步請求處理函數, */
 function doGetObjects(){
  //1.定義url和參數
  var url = "doFindPageObjects";
  var params={"pageCurrent":1};
  //2.發起異步請求
   //請問如下ajax請求的回調函數參數名可以是任意嗎?//可以,必須符合標識符的規范
  $.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>

創建上下頁翻頁的按鈕HTML頁 以及js的編寫

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<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.綁定數據(為后續對此數據的使用提供服務)
 $("#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.基于點擊的對象執行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");
  //為什么要執行如下判斷,然后初始化pageCurrent的值為1
  //pageCurrent參數在沒有賦值的情況下,默認初始值應該為1.
  if(!pageCurrent)
   pageCurrent=1;
  var params={"pageCurrent":pageCurrent};
  //2.發起異步請求
  //請問如下ajax請求的回調函數參數名可以是任意的嗎??可以,必須符合標識符的規范
  $.getJSON(url,params,function(result){
   //請問result是一個字符串還是json格式的js對象? 答:json格式對象
   doHandleQueryResponseResult(result);
 
  });
 }//特殊的ajax函數
 
</script>~~~~

總結

到此這篇關于spring Boot查詢數據分頁顯示的文章就介紹到這了,更多相關springBoot查詢數據分頁內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://segmentfault.com/a/1190000023599865

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 紧身裙女教师波多野结衣 | 四虎b7s22c0m | 久久精品国产在热亚洲 | 久久精品观看 | 精品国产视频 | 国产清纯91天堂在线观看 | 亚洲一区二区三区91 | 国产99精品免费视频看6 | 亚洲欧美国产精品完整版 | 日本色女 | 欧美日韩精品一区二区三区高清视频 | 99re热| 日韩特级片 | 精品亚洲视频在线 | 波多野结衣中文丝袜字幕 | 无人区在线观看免费国语完整版 | 国产精品久久久久不卡绿巨人 | 天天色综合三 | 王雨纯羞羞 | 久久99精品久久久久久园产越南 | 国产精品免费小视频 | 欧美高清片 | 午夜视频一区二区三区 | 国产盗摄wc女厕所 | 国产区久久 | oneday高清在线观看 | 欧美国产日韩在线 | 久草在线精彩免费视频 | 五月天在线视频观看 | 国产一区二区播放 | 成年性午夜免费视频网站不卡 | 日韩成人影视 | 色戒 完整版 | 成年人在线观看视频 | 婷婷久久综合九色综合九七 | 99这里精品 | 国产精品久久久久这里只有精品 | 亚洲AV中文字幕无码久久 | 王淑兰李思雨李铁柱乡村小说免费 | 亚洲国产精品免费在线观看 | 3d动漫美女被吸乳羞羞视频 |