国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot實現(xiàn)分頁的三種方式

這篇具有很好參考價值的文章主要介紹了SpringBoot實現(xiàn)分頁的三種方式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一 自己封裝Page對象實現(xiàn)

博客鏈接

二 使用sql實現(xiàn)分頁

2.1 場景分析
  • 前段傳遞給給后臺什么參數(shù)?
    • 當(dāng)前頁碼currentPage
    • 每頁顯示條數(shù)pageSize
  • 后臺給前端返回什么數(shù)據(jù)?
    • 當(dāng)前頁數(shù)據(jù)List
    • 總記錄數(shù)totalCount
2.2 前段代碼
<template>
   <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="currentPage"
      :page-sizes="[5, 10, 15, 20]"
      :page-size="5"
      layout="total, sizes, prev, pager, next, jumper"
      :total="totalCount">
    </el-pagination>
</template>
<script>
  export default {
    methods: {
      handleSizeChange(val) {
        //console.log(`每頁 ${val} 條`);
        // 重新設(shè)置每頁顯示的條數(shù)
        this.pageSize = val;
        this.selectAll();
      },
      handleCurrentChange(val) {
        // console.log(`當(dāng)前頁: ${val}`);
        // 重新設(shè)置當(dāng)前頁碼
        this.currentPage = val;
        this.selectAll();
      }
    },
    data() {
      return {
        // 當(dāng)前頁碼
        currentPage: 1,
        // 總記錄數(shù)
        totalCount: 100,
        // 每頁顯示條數(shù)
        pageSize: 5,
        //接收當(dāng)前頁數(shù)據(jù)集合
        tableData:[]
      };
    },
    methods:{
		// 分頁查詢
		selectAll(){
			axios({
				method:"get",
				url:'后端接口地址',
			}).then(response => {
				//設(shè)置表格數(shù)據(jù)
				this.tableData = response.data.rows;
				//設(shè)置總記錄數(shù)
				this.totalCount = response.data.totalCount
			})
		}
	}
  }
</script>
2.3 后端代碼
PageBean
// 分頁查詢JavaBean
public class PageBean<T> {
    // 總記錄數(shù)
    private int totalCount;
    // 當(dāng)前頁數(shù)據(jù)
    private List<T> rows;
    get,set...
}
mapper
// 分頁查詢
@Select("select * from 表名 limit #{begin} , #{size}")
List<T> selectByPage(@Param("begin") int begin,@Param("size") int size);

// 查詢總記錄數(shù)
@Select("select count(*) from 表名")
int selectTotalCount();
service
// 分頁查詢 currentPage:當(dāng)前頁碼  pageSize:每頁展示條數(shù)
PageBean<T> selectByPage(int currentPage,int pageSize);
impl
@Override
public PageBean<T> selectByPage(int currentPage,int pageSize){
    // 計算開始索引
    int begin = (currentPage - 1) * pageSize;
    // 計算查詢條目數(shù)
    int size = pageSize;
    // 查詢當(dāng)前頁數(shù)據(jù)
    List<T> rows = mapper.selectByPage(begin,size);
    // 查詢總記錄數(shù)
    int totalCount = mapper.selectTotalCount();
    // 封裝PageBean對象
    PageBean<T> pageBean = new PageBean<>();
    pageBean.setRows(rows);
    pageBean.setTotalCount(totalCount);

    return pageBean;
}
controller
@GetMapping("/selectAll")
public AjaxResult getApproveDataRes(ImportDataGetDto importDataGetDto){
	//接收前段傳遞請求參數(shù)實體importDataGetDto
	int currentPage = importDataGetDto.getCurrentPage();
	int pageSize = importDataGetDto.getPageSize();
	PageBean<T> pageBean = mapper.selectByPage(currentPage,pageSize)
    return pageBean;
}

三 使用PageHelper插件

PageHelper官網(wǎng)

3.1 導(dǎo)入依賴
<dependencies>
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.2.3</version>
    </dependency>
</dependencies>
3.2 application.yml
pagehelper:
  # 設(shè)置方言,此處指定 MySQL 數(shù)據(jù)庫
  helper-dialect: mysql
  # 是否啟動合理化,默認(rèn)是 false。
  # 啟用合理化時,如果pageNum<1會查詢第一頁,如果pageNum>pages(最大頁數(shù))會查詢最后一頁。
  # 禁用合理化時,如果pageNum<1或pageNum>pages會返回空數(shù)據(jù)
  reasonable: true
  # 是否支持接口參數(shù)來傳遞分頁參數(shù),默認(rèn)false
  support-methods-arguments: true
  # 為了支持startPage(Object params)方法,增加了該參數(shù)來配置參數(shù)映射,用于從對象中根據(jù)屬性名取值
  params: count=countSql
  # 默認(rèn)值為 false,當(dāng)該參數(shù)設(shè)置為 true 時,如果 pageSize=0 或者 RowBounds.limit = 0 就會查詢出全部的結(jié)果(相當(dāng)于沒有執(zhí)行分頁查詢,但是返回結(jié)果仍然是 Page 類型)
  page-size-zero: true
3.3 使用
/**
* service實現(xiàn)類
* @param pageNumber    頁碼
* @param pageSize      每頁顯示數(shù)目
*/
public PageInfo<T> list(Integer pageNumber, Integer pageSize) { 
    // 設(shè)置分頁
    PageHelper.startPage(pageNumber, pageSize);
 
    // 查詢用戶角色列表(需要分頁的查詢)
    List<T> list = userRoleService.queryList();
    PageInfo<T> pageInfo = new PageInfo<>(list);
 
    return pageInfo;
)

注意:PageHelper.startPage(頁碼, 每頁顯示數(shù)目); 這一句代碼,必須放在需要分頁的查詢語句之前,否則會分頁不生效

3.4 分頁失效情況

分頁設(shè)置與需要分頁的查詢之間存在其他查詢,如下代碼是一個錯誤示范,雖然在方法的開頭設(shè)置了分頁,但因為在【查詢用戶角色列表】之前,多查了一步【查詢用戶信息】,此時實際上分頁針對的是【查詢用戶信息】進行分頁,而并非對【查詢用戶角色列表】進行分頁。

public PageInfo<UserRole> list(Integer pageNumber, Integer pageSize, String userId) {
    // 設(shè)置分頁
    PageHelper.startPage(pageNumber, pageSize);
 
    // 查詢用戶信息
    User user = userService.findById(userId);
 
    // 查詢用戶角色列表(需要分頁的查詢)
    List<UserRole> list = userRoleService.queryList();
    PageInfo<UserRole> pageInfo = new PageInfo<UserRole>(list);
 
    return pageInfo;
)

注意:startPage會尋找最近的一個查詢方法執(zhí)行分頁

在需要分頁的查詢后才設(shè)置分頁,如下代碼是一個錯誤示范,在【查詢用戶角色列表】后才進行分頁設(shè)置,因為已進行的所有數(shù)據(jù)的查詢,所以此時再設(shè)置分頁已無任何意義,自然會分頁失效

public PageInfo<UserRole> list(Integer pageNumber, Integer pageSize) {
    // 查詢用戶角色列表(需要分頁的查詢)
    List<UserRole> list = userRoleService.queryList();
 
    // 設(shè)置分頁
    PageHelper.startPage(pageNumber, pageSize);
    PageInfo<UserRole> pageInfo = new PageInfo<UserRole>(list);
 
    return pageInfo;
)
3.5 返回參數(shù)說明
//當(dāng)前頁
private int pageNum;
//每頁的數(shù)量
private int pageSize;
//當(dāng)前頁的數(shù)量
private int size;
//當(dāng)前頁面第一個元素在數(shù)據(jù)庫中的行號
private int startRow;
//當(dāng)前頁面最后一個元素在數(shù)據(jù)庫中的行號
private int endRow;
//總記錄數(shù)
private long total;
//總頁數(shù)
private int pages;
//結(jié)果集重要,通過getList獲取結(jié)果集
private List<T> list;

//前一頁
private int prePage;
//下一頁
private int nextPage;

//是否為第一頁
private boolean isFirstPage = false;
//是否為最后一頁
private boolean isLastPage = false;
//是否有前一頁
private boolean hasPreviousPage = false;
//是否有下一頁
private boolean hasNextPage = false;
//導(dǎo)航頁碼數(shù)
private int navigatePages;
//所有導(dǎo)航頁號
private int[] navigatepageNums;
//導(dǎo)航條上的第一頁
private int navigateFirstPage;
//導(dǎo)航條上的最后一頁
private int navigateLastPage;
3.6 自定義返回參數(shù)
//使用默認(rèn)分頁時
PageHelper.startPage(page, size);
List<DataBean> beans = mapper.selectByQuery(express);
return new PageInfo<>(beans);

根據(jù)上述代碼可以發(fā)現(xiàn),想要進行自定義分頁的話,只需要重新定義一個PageInfo就可以了。保留當(dāng)前頁、每頁數(shù)量、當(dāng)前頁數(shù)量、總記錄數(shù)、總頁數(shù)字段,其他參數(shù)全部干掉,拷貝下PageInfo,在實體目錄下新建個PageBean,把PageInfo源碼丟進去,刪掉多余的參數(shù)就OK了

public class PageBean<T> {
    private static final long serialVersionUID = 1L;
    //當(dāng)前頁
    private int pageNum;
    //每頁的數(shù)量
    private int pageSize;
    //當(dāng)前頁的數(shù)量
    private int size;
    //總記錄數(shù)
    private long total;
    //總頁數(shù)
    private int pages;
    //結(jié)果集
    private List<T> list;
    get,set...
}

然后分頁代碼把PageInfo改成自己的PageBean

PageHelper.startPage(page, size);
List<DataBean> beans = mapper.selectByQuery(express);
return new PageBean<>(beans);

四 使用PagedListHolder類

PagedListHolderSpring Framework中的一個分頁輔助類,用于對列表進行分頁顯示和管理。它可以將一個列表對象進行分頁處理,并提供了一些方法,用于管理分頁的相關(guān)信息。使用PagedListHolder可以方便地對列表進行分頁處理,包括獲取當(dāng)前頁的數(shù)據(jù)、切換到下一頁或上一頁、設(shè)置每頁顯示的記錄數(shù)等操作。它還提供了一些其他的方法,如獲取總頁數(shù)、獲取當(dāng)前頁碼等。

代碼演示
前端(ElmentUI分頁組件)
<template>
   <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="currentPage"
      :page-sizes="[5, 10, 15, 20]"
      :page-size="pageSize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="totalCount">
    </el-pagination>
</template>
<script>
  export default {
    methods: {
      handleSizeChange(val) {
        //console.log(`每頁 ${val} 條`);
        // 重新設(shè)置每頁顯示的條數(shù)
        this.pageSize = val;
        this.selectAll();
      },
      handleCurrentChange(val) {
        // console.log(`當(dāng)前頁: ${val}`);
        // 重新設(shè)置當(dāng)前頁碼
        this.currentPage = val;
        this.selectAll();
      }
    },
    data() {
      return {
        // 當(dāng)前頁碼
        currentPage: 1,
        // 總記錄數(shù)
        totalCount: 0,
        // 每頁顯示條數(shù)
        pageSize: 5,
        //接收當(dāng)前頁數(shù)據(jù)集合
        tableData:[]
      };
    },
    methods:{
    	 /*
    分頁查詢
    */
    handleSizeChange(val) {
        console.log(`每頁 ${val}`);
        // 重新設(shè)置每頁顯示的條數(shù)
        this.pageSize = val;
        this.selectAll();
      	},
	    handleCurrentChange(val) {
	       console.log(`當(dāng)前頁: ${val}`);
	      // 重新設(shè)置當(dāng)前頁碼
	      this.currentPage = val;
	      this.selectAll();
	    },
		// 分頁查詢
		selectAll(){
			axios({
				method:"get",
				url:'后端接口地址',
			}).then(response => {
				//設(shè)置表格數(shù)據(jù)
				this.tableData = response.data.rows;
				//設(shè)置總記錄數(shù)
				this.totalCount = response.data.total
			})
		}
	}
  }
</script>
后端

dto實體

@Data
public class ApproveGetDto {
    ...
    // 當(dāng)前頁碼
    private Integer currentPage;
    // 每頁展示條數(shù)
    private Integer pageSize;
}

vo實體

@Data
public class ApproveGetRes<T> {
	...
    //分頁查詢:總記錄數(shù)
    private Long total;
    //分頁查詢:當(dāng)前頁數(shù)據(jù)
    private T rows;
}

controller

 @GetMapping("/getApproveDataRes")
 public AjaxResult getApproveDataRes(ApproveGetDto approveGetDto ){
 	 // 通過前端傳遞參數(shù)調(diào)用service獲取數(shù)據(jù)
     List<ApproveGetRes> approveGetRes= lsjsService.getApproveDataRes(approveGetDto);
     // 設(shè)置要進行分頁處理的數(shù)據(jù)源
     PagedListHolder<ApproveGetRes> plh = new PagedListHolder<>(approveGetRes);
     // 設(shè)置每頁顯示的記錄數(shù)
     plh.setPageSize(approveGetDto.getPageSize());
     // 設(shè)置當(dāng)前顯示的頁碼,0代表第一頁
     plh.setPage(approveGetDto.getCurrentPage()-1);
     // 創(chuàng)建vo對象
     ApproveGetRes dataRes = new ApproveGetRes();
     // 設(shè)置vo對象的總條數(shù)
     dataRes.setTotal(Long.valueOf(approveDataRes.size()));
     // plh.getPageList():獲取當(dāng)前頁的數(shù)據(jù)列表
     dataRes.setRows(plh.getPageList());
     return AjaxResult.success("返回成功", dataRes);
 }

方法解釋文章來源地址http://www.zghlxwxcb.cn/news/detail-688378.html

// 1. 設(shè)置要進行分頁處理的源列表
List<ApproveGetRes> approveGetRes= lsjsService.getApproveDataRes(approveGetDto);
PagedListHolder<ApproveGetRes> pagedListHolder = new PagedListHolder<>(approveGetRes);
// 2. 設(shè)置每頁顯示的記錄數(shù)
pagedListHolder.setPageSize(2);
// 3. 設(shè)置當(dāng)前顯示的頁碼
pagedListHolder.setPage(0);
// 4. 獲取當(dāng)前頁的數(shù)據(jù)列表
List<String> currentPageData = pagedListHolder.getPageList();
// 5. 切換到下一頁
pagedListHolder.nextPage();
// 6. 切換到上一頁
pagedListHolder.previousPage();
// 7. 獲取總頁數(shù)
int totalPages = pagedListHolder.getPageCount();
// 8. 獲取當(dāng)前頁碼
int currentPage = pagedListHolder.getPage();
// 9. 判斷當(dāng)前頁是否為第一頁
boolean isFirstPage = pagedListHolder.isFirstPage();
// 10. 判斷當(dāng)前頁是否為最后一頁
boolean isLastPage = pagedListHolder.isLastPage();

到了這里,關(guān)于SpringBoot實現(xiàn)分頁的三種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • SpringBoot獲取HttpServletRequest、HttpServletResponse的三種方式

    SpringBoot獲取HttpServletRequest、HttpServletResponse的三種方式

    僅僅適用在controller方法上。當(dāng)Spring接收到HTTP請求時,會尋找一個合適的方法來處理該請求。如果該方法參數(shù)上標(biāo)注了@RequestMapping或@Get、@Post等注解,Spring就會將HttpServletRequest對象注入到該參數(shù)中。 適用于所有的bean 通過調(diào)試可以看到,注入的Reques是一個代理類,而這個被代

    2024年02月19日
    瀏覽(25)
  • Springboot中使用線程池的三種方式

    前言 多線程是每個程序員的噩夢,用得好可以提升效率很爽,用得不好就是埋汰的火葬場。 這里不深入介紹,主要是講解一些標(biāo)準(zhǔn)用法,熟讀唐詩三百首,不會作詩也會吟。 這里就介紹一下springboot中的多線程的使用,使用線程連接池去異步執(zhí)行業(yè)務(wù)方法。 由于代碼中包含詳

    2024年02月08日
    瀏覽(24)
  • SpringBoot導(dǎo)出Word文檔的三種方式

    SpringBoot導(dǎo)出Word文檔的三種方式

    1、直接在Java代碼里創(chuàng)建Word文檔,設(shè)置格式樣式等,然后導(dǎo)出。(略) 需要的見:https://blog.csdn.net/qq_42682745/article/details/120867432 2、富文本轉(zhuǎn)換后的HTML下載為Word文檔。相當(dāng)于把HTML轉(zhuǎn)為Word導(dǎo)出 3、使用模板技術(shù)導(dǎo)出。固定格式、可以寫入不同數(shù)據(jù) 其他: springboot版本:2.7.11 導(dǎo)

    2024年02月02日
    瀏覽(22)
  • SpringBoot獲取Request請求的三種方式

    Request對象包含了請求的各種信息,比如請求方法、請求URL、請求參數(shù)、請求內(nèi)容等等,這些信息可以供服務(wù)器進行處理和響應(yīng)。那么在SpringBoot中,怎么才能獲取到Request對象? 本文將介紹三種方法,并提示例參考。 一、直接在Controller方法參數(shù)上注入HttpServletRequest 這是最常用

    2024年02月04日
    瀏覽(25)
  • SpringBoot+MyBatis批量插入數(shù)據(jù)的三種方式

    最近導(dǎo)入表格數(shù)據(jù)時需要同時插入修改大量數(shù)據(jù),研究了一下有三種實現(xiàn)方式 1、用for循環(huán)調(diào)用sql插入數(shù)據(jù) 這種方式插入大量數(shù)據(jù)時,效率非常底下,不推薦 2、利用mybatis的foreach來實現(xiàn)循環(huán)插入 這種方式插入大量數(shù)據(jù)時,好處是不用頻繁訪問數(shù)據(jù)庫,一條sql搞定,效率比較

    2024年02月16日
    瀏覽(20)
  • Springboot接入OpenAi/Chat GPT的三種方式

    由于現(xiàn)在網(wǎng)上的相關(guān)教程并不多外加沒有使用代理的demo,所以拋磚引玉,寫了三種調(diào)用方式,分別是直接訪問、非官方SDK訪問、官方開源的SDK訪問 1、導(dǎo)入pom文件(2023.3.30最新版本) 2、入?yún)?這里的TalkDto 還可以入?yún)axToken,用于返回最大量的數(shù)據(jù),官方計算token大小的方式:

    2023年04月19日
    瀏覽(21)
  • idea社區(qū)版本創(chuàng)建springboot項目的三種方式

    ? 文章目錄 一、前言 一、方式1:spring 官方創(chuàng)建 springboot項目 1、打開在線的 spring initializr 2、選擇項目的語言、版本、依賴等 3、 解壓源碼包,并使用IDEA打開 4、測試接口 二、方式2:社區(qū)idea安裝Spring插件 1、添加插件 三、方式3:(麻煩)手動maven 創(chuàng)建springboot項目 一、前言

    2023年04月09日
    瀏覽(22)
  • 【SpringBoot】讀取application.yml配置中的三種方式

    applicaiton.yml BootValueApplicationTests.java 打印如下所示 注意的地方 當(dāng)對應(yīng)的值不存在時,系統(tǒng)會報錯。我們可以給定一個默認(rèn)值即可。 如下所示: 在這里,sys.noValue這個值是不存在的,我們可以給定一個默認(rèn)值為123,當(dāng)然,我們?nèi)绻恢付J(rèn)值的,它的默認(rèn)值為空字符串。 優(yōu)

    2024年02月13日
    瀏覽(21)
  • 生產(chǎn)項目中基于springboot項目解決循環(huán)依賴的三種方式

    在生產(chǎn)項目中,可以使用Spring Boot框架來快速開發(fā)Spring應(yīng)用程序。Spring Boot提供了一種方便的方式來創(chuàng)建獨立的,基于Spring的應(yīng)用程序,并且有著高度的自動化配置和開箱即用的特性。 可以使用@Lazy注解來控制Bean的延遲初始化,同時可以使用AOP切面編程來解決循環(huán)依賴問題。

    2024年02月11日
    瀏覽(22)
  • java篇-Springboot解決跨域問題的三種方式

    第一種:添加 @CrossOrigin 注解 在Controller層對應(yīng)的方法上添加@CrossOrigin或者類上添加@CrossOrigin?? 第二種:添加CORS過濾器 新建配置類CorsConfig,創(chuàng)建 CorsFilter 過濾器,允許跨域 ?第三種:實現(xiàn) WebMvcConfigurer ,重寫 addCorsMappings 方法 全局配置有可能出現(xiàn)跨域失敗的情況,改為過濾

    2024年04月23日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包