最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot中分頁(yè)插件PageHelper的使用詳解

 更新時(shí)間:2024年09月17日 11:19:49   作者:空谷憂人  
分頁(yè)查詢是為了高效展示大量數(shù)據(jù),通過(guò)分頁(yè)將數(shù)據(jù)劃分為多個(gè)部分逐頁(yè)展示,原生方法需手動(dòng)計(jì)算數(shù)據(jù)起始行,而使用PageHelper插件則簡(jiǎn)化這一過(guò)程,本文給大家介紹SpringBoot中分頁(yè)插件PageHelper的使用,感興趣的朋友一起看看吧

1.分頁(yè)概念

用戶查詢的數(shù)據(jù)不可能一次性全部展示給用戶(如果用戶有一萬(wàn)條數(shù)據(jù)呢),而是分頁(yè)展示給用戶,這就是分頁(yè)查詢。

2.原生寫法

步驟:

controller層:

  • 接受請(qǐng)求,請(qǐng)求數(shù)據(jù)=頁(yè)碼+每頁(yè)數(shù)量+查詢條件(非必須)
  • 調(diào)用業(yè)務(wù)層完成分頁(yè)查詢
  • 將結(jié)果響應(yīng)給前端

service層:

  • 換算起始查詢的行號(hào)(就是用戶點(diǎn)擊的第幾頁(yè),該頁(yè)的第一條是數(shù)據(jù)的第幾行)
  • 調(diào)用數(shù)據(jù)層完成分頁(yè)查詢
  • 調(diào)用數(shù)據(jù)層完成數(shù)量的查詢
  • 封裝結(jié)果(數(shù)據(jù)+數(shù)量)【創(chuàng)建一個(gè)對(duì)象接受】
  • 返回給controller層

mapper層:

  • 動(dòng)態(tài)SQL拼接帶條件的分頁(yè)查詢數(shù)據(jù)(數(shù)據(jù))
  • 動(dòng)態(tài)查詢符合條件的數(shù)據(jù)總數(shù)(數(shù)量)

為啥要封裝一個(gè)對(duì)象接受呢?

客戶端需要兩條數(shù)據(jù),一個(gè)是分頁(yè)查詢的數(shù)據(jù),還有一個(gè)是分頁(yè)查詢的總條數(shù),但是返回值只能返回一個(gè),因此要封裝在一個(gè)對(duì)象中,代碼如下。

package com.its.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageResult {
    private Object data;
    private Long total;
}

案例測(cè)試

需求:將所有的房間分頁(yè)查詢出來(lái)展示。

controller層方法

package com.its.controller;
import com.its.domain.PageResult;
import com.its.domain.Result;
import com.its.domain.Room;
import com.its.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
    @PostMapping("/selectAllRoom")
    public Result selectAllRoom(Room room, Integer pageNo, Integer pageSize){
//        1.接受請(qǐng)求,請(qǐng)求數(shù)據(jù)為 頁(yè)碼數(shù)+每頁(yè)的數(shù)量+查詢的條件
        return testService.selectAllRoom(room,pageNo,pageSize);
    }
}

service層代碼

package com.its.mapper;
import com.its.domain.PageResult;
import com.its.domain.Room;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface TestMapper {
//    原生分頁(yè)查詢
    List<Room> selectAllRoom(@Param("room") Room room,
                             @Param("pageStart") Integer pageStart,
                             @Param("pageSize") Integer pageSize);
    int selectTotal(@Param("room") Room room);
}

mapper

package com.its.mapper;
import com.its.domain.PageResult;
import com.its.domain.Room;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface TestMapper {
//    原生分頁(yè)查詢
    List<Room> selectAllRoom(@Param("room") Room room,
                             @Param("pageStart") Integer pageStart,
                             @Param("pageSize") Integer pageSize);
    int selectTotal(@Param("room") Room room);
}

xml映射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.its.mapper.TestMapper">
//分頁(yè)查詢符合條件的數(shù)據(jù)
    <select id="selectAllRoom" resultType="com.its.domain.Room">
        select * from room
        <where>
            <if test="room.info!=null and room.info!=''">
                info like concat('%',#{room.info},'%')
            </if>
        </where>
        limit #{pageStart},#{pageSize}
    </select>
//查詢總數(shù)量
    <select id="selectTotal" resultType="java.lang.Integer">
        select count(1) from room
        <where>
            <if test="room.info!=null and room.info!=''">
                info like concat('%',#{room.info},'%')
            </if>
        </where>
    </select>
</mapper>

在postMan中測(cè)試得到如下結(jié)果,分頁(yè)查詢完成

3.PageHelper插件分頁(yè)查詢

3.1 介紹

步驟:

controller層(不變):

  • 接受請(qǐng)求,請(qǐng)求數(shù)據(jù)=頁(yè)碼+每頁(yè)數(shù)量+查詢條件(非必須)
  • 調(diào)用業(yè)務(wù)層完成分頁(yè)查詢
  • 將結(jié)果響應(yīng)給前端

service層:

  • 調(diào)用PageHelper中的 startPage(參數(shù)頁(yè)碼,每頁(yè)數(shù)量) 方法,然后返回一個(gè)Page對(duì)象。
  • 調(diào)用數(shù)據(jù)層完成分頁(yè)查詢
  • 直接用Page對(duì)象中的方法封裝結(jié)果(數(shù)據(jù)+數(shù)量)
  • 返回給controller層

mapper層:

直接動(dòng)態(tài)SQL拼接帶查詢條件的查詢(SQL語(yǔ)句中不用使用limit)

【原理介紹】

  • 會(huì)給查詢的SQL語(yǔ)句進(jìn)行語(yǔ)句拼接,添加limit,并賦值分頁(yè)條件
  • 會(huì)動(dòng)態(tài)生成查詢數(shù)量的SQL語(yǔ)句并執(zhí)行。
  • 會(huì)將分頁(yè)相關(guān)的所有結(jié)果(分頁(yè)數(shù)量+數(shù)量+頁(yè)碼數(shù)+起始查詢行號(hào)+每頁(yè)的數(shù)量等)封裝到一個(gè)Page對(duì)象中。

Page中方法介紹:

3.2 使用

代碼書寫,還是以上面為例。

(1)導(dǎo)入PageHelper所需依賴

<!--分頁(yè)插件依賴-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.7</version>
        </dependency>

(2)controller層

package com.its.controller;
import com.its.domain.PageResult;
import com.its.domain.Result;
import com.its.domain.Room;
import com.its.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
    @Autowired
    TestService testService;
    @PostMapping("/selectAll")
//參數(shù)為查詢條件,頁(yè)數(shù),每頁(yè)的展示數(shù)
    public PageResult selectAll(Room room,Integer pageNo,Integer pageSize){
        PageResult pageResult = testService.selectAll(room, pageNo, pageSize);
        return pageResult;
    }
}

(3)service層

package com.its.service.Impl;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.its.domain.PageResult;
import com.its.domain.Result;
import com.its.domain.Room;
import com.its.mapper.TestMapper;
import com.its.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class TestServiceImpl implements TestService {
    @Autowired
    TestMapper testMapper;
    @Override
    public PageResult selectAll(Room room, Integer pageNo, Integer pageSize) {
//        開(kāi)啟分頁(yè)查詢,當(dāng)執(zhí)行查詢時(shí),插件進(jìn)行相關(guān)的sql攔截進(jìn)行分頁(yè)操作,返回一個(gè)page對(duì)象
        Page<Room> page = PageHelper.startPage(pageNo, pageSize);
//        調(diào)用mapper層完成查詢
        testMapper.selectAll(room);
//        封裝結(jié)果
        PageResult pageResult = new PageResult(page.getResult(), page.getEndRow());
        System.out.println(pageResult);
        System.out.println(page);
        return pageResult;
    }
}

(4)mapper層

package com.its.mapper;
import com.its.domain.PageResult;
import com.its.domain.Room;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface TestMapper {
//    使用分頁(yè)插件分頁(yè)查詢
    List<Room> selectAll(@Param("room") Room room);
}

(5)xml映射文件

<?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.its.mapper.TestMapper">
    <select id="selectAll" resultType="com.its.domain.Room">
        select * from room
    </select>
</mapper>

(6)測(cè)試結(jié)果:

3.3 Page對(duì)象和PageInf對(duì)象

在 PageHelper 中,Page 和 PageInfo 都是用來(lái)處理分頁(yè)數(shù)據(jù)的重要類。

Page對(duì)象

Page 是一個(gè)接口,它包含分頁(yè)數(shù)據(jù)以及一些基本的分頁(yè)信息(如總記錄數(shù)、當(dāng)前頁(yè)等)。當(dāng)使用 PageHelper 進(jìn)行分頁(yè)查詢時(shí),查詢結(jié)果會(huì)被自動(dòng)封裝到一個(gè)實(shí)現(xiàn)了 Page 接口的對(duì)象中。

PageInfo對(duì)象

PageInfo 是 PageHelper 提供的一個(gè)類,用于封裝更詳細(xì)的分頁(yè)信息。它不僅包含了分頁(yè)數(shù)據(jù),還提供了更多的輔助信息,如是否為第一頁(yè)、最后一頁(yè)、導(dǎo)航頁(yè)碼等。

使用PageInfo進(jìn)行上面的替換,業(yè)務(wù)層代碼為

到此這篇關(guān)于SpringBoot中分頁(yè)插件(PageHelper)的使用的文章就介紹到這了,更多相關(guān)SpringBoot分頁(yè)插件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的JetCache?實(shí)戰(zhàn)

    Java中的JetCache?實(shí)戰(zhàn)

    這篇文章主要介紹了Java中的JetCache實(shí)戰(zhàn),JetCache是一個(gè)基于Java的緩存系統(tǒng)封裝,提供統(tǒng)一的API和注解來(lái)簡(jiǎn)化緩存的使用,下文更多相關(guān)資料需要的小伙伴可以參考一下
    2022-04-04
  • Java匹配正則表達(dá)式匯總

    Java匹配正則表達(dá)式匯總

    java匹配字符串表達(dá)式在我們數(shù)據(jù)處理方面是及其重要的,現(xiàn)在就把我這幾天數(shù)據(jù)處理比較常用的向大家介紹一下,常規(guī)的一些匹配方式就不介紹了,我們來(lái)學(xué)習(xí)一些特殊的,感興趣的朋友跟隨小編一起看看吧
    2023-03-03
  • SpringBoot中過(guò)濾器Filter+JWT令牌實(shí)現(xiàn)登錄驗(yàn)證

    SpringBoot中過(guò)濾器Filter+JWT令牌實(shí)現(xiàn)登錄驗(yàn)證

    本文主要介紹了SpringBoot中過(guò)濾器Filter+JWT令牌實(shí)現(xiàn)登錄驗(yàn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • 使用Hibernate根據(jù)實(shí)體類自動(dòng)生成表的方法

    使用Hibernate根據(jù)實(shí)體類自動(dòng)生成表的方法

    這篇文章主要介紹了使用Hibernate根據(jù)實(shí)體類自動(dòng)生成表的方法,該篇提供了兩種方法,可以根據(jù)需要選擇其一,希望對(duì)你有所幫助,如有不對(duì)的地方還望指正
    2023-03-03
  • Java實(shí)現(xiàn)文件名倒序排序的技術(shù)指南

    Java實(shí)現(xiàn)文件名倒序排序的技術(shù)指南

    在實(shí)際開(kāi)發(fā)過(guò)程中,我們經(jīng)常需要對(duì)文件進(jìn)行操作和處理,一個(gè)常見(jiàn)的需求是按文件名倒序排列文件列表,以便于文件的管理和查找,本文將介紹如何在Java中實(shí)現(xiàn)文件名倒序排序,并提供詳細(xì)的代碼案例,需要的朋友可以參考下
    2024-08-08
  • SpringBoot集成OptaPlanner與使用指南

    SpringBoot集成OptaPlanner與使用指南

    本文詳細(xì)介紹如何在Spring Boot項(xiàng)目中集成OptaPlanner約束求解器,并實(shí)現(xiàn)復(fù)雜值班排班系統(tǒng),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • Java編程線程間通信與信號(hào)量代碼示例

    Java編程線程間通信與信號(hào)量代碼示例

    這篇文章主要介紹了Java編程線程間通信與信號(hào)量代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Java橋接模式原理及用法解析

    Java橋接模式原理及用法解析

    這篇文章主要介紹了Java橋接模式原理及用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 詳解Java使用Jsch與sftp服務(wù)器實(shí)現(xiàn)ssh免密登錄

    詳解Java使用Jsch與sftp服務(wù)器實(shí)現(xiàn)ssh免密登錄

    這篇文章主要介紹了詳解Java使用Jsch與sftp服務(wù)器實(shí)現(xiàn)ssh免密登錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • java實(shí)現(xiàn)輸出文件夾下某個(gè)格式的所有文件實(shí)例代碼

    java實(shí)現(xiàn)輸出文件夾下某個(gè)格式的所有文件實(shí)例代碼

    這篇文章主要介紹了java實(shí)現(xiàn)輸出文件夾下某個(gè)格式的所有文件,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06

最新評(píng)論

西和县| 公主岭市| 大渡口区| 汝阳县| 郯城县| 富源县| 高清| 永嘉县| 南部县| 镇江市| 彩票| 陆河县| 牟定县| 新绛县| 岑溪市| 石楼县| 湖北省| 金阳县| 砚山县| 若羌县| 鹤庆县| 乌鲁木齐县| 深州市| 德安县| 新干县| 武穴市| 万载县| 县级市| 星座| 册亨县| 中方县| 湛江市| 安平县| 靖州| 丰台区| 鄢陵县| 杭锦旗| 屯留县| 稷山县| 武陟县| 雷山县|