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

SpringBoot使用PageHelper分頁詳解

 更新時間:2023年10月25日 09:40:32   作者:刻苦的樊同學  
這篇文章主要介紹了SpringBoot使用PageHelper分頁詳解,我們在任何的系統(tǒng)中,分頁功能是必不可少的,然而,對于這個功能如果有一種快速開發(fā)的實現(xiàn)方式,當然可以節(jié)省我們很多的時間了,接下來,我就給大家基于不同的環(huán)境來說說如何使用一個分頁插件,需要的朋友可以參考下

pagehelper

我們在任何的系統(tǒng)中,分頁功能是必不可少的。然而,對于這個功能如果有一種快速開發(fā)的實現(xiàn)方式,當然可以節(jié)省我們很多的時間了。接下來,我就給大家基于不同的環(huán)境來說說如何使用一個分頁插件:pagehelper,它是Mybatis的一個分頁插件。 這里使用一個簡單的springboot的demo項目來實現(xiàn),前臺頁面使用的Thymeleaf模板引擎。

首先加入pageHelper的依賴

<dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.5</version>
        </dependency>

然后在配置文件中加入pageHelper的相關(guān)配置

# pageHelper配置
# 指定數(shù)據(jù)庫
pagehelper.helper-dialect=mysql
# 頁碼<=0 查詢第一頁,頁碼>=總頁數(shù)查詢最后一頁
pagehelper.reasonable=true
# 支持通過 Mapper 接口參數(shù)來傳遞分頁參數(shù)
pagehelper.support-methods-arguments=true

使用

pageHelper就可以使用了。 (基本的springboot的搭建步驟就不說了,之前已經(jīng)寫過文章) 簡單的去數(shù)據(jù)庫查一張表,達到分頁效果。

dao層

@Select(value = "select * from address")
    List<Map> pageListss();

service層和serviceImpl層

List<Map> pageListss( Integer pn);
@Override
    public List<Map> pageListss(Integer pn) {
    //判斷的目的是前臺訪問的路徑?jīng)]有pn參數(shù),則pn當前頁參數(shù)默認為1(第一頁)
        if(pn==null){
            pn=1;
        }
        //參數(shù)(當前頁,一頁展示多少條)
        PageHelper.startPage(pn,3);
        //只有在startPage下面的第一個select動作會被分頁
        List<Map> pageList=selectMapper.pageListss();
        //把查到的list列表進行pageInfo處理,返回一個分頁列表
        PageInfo<Map> pageInfo=new PageInfo(pageList);
        return pageList;
    }

controller層

@Controller
@RequestMapping(value = "/page")
public class PageController {
    @Autowired
    SelectService selectService;
    @RequestMapping("list")//pn是當前頁,頁面?zhèn)鹘o后臺
    public String list(Integer pn,Model model){
		//這時,從service返回來的列表list已經(jīng)是被分頁后的列表了
        List<Map> list=selectService.pageListss(pn);
        //把分頁后的list放到model中,在頁面展示信息(thymeleaf模板引擎使用model放置信息)
        model.addAttribute("list",list);
        return "test";
    }
}

test.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>pageHelper練習</title>
</head>
<body>
<table border="1">
    <thead>
    <tr>
        <th>ID</th>
        <th>地址</th>
        <th>詳細地址</th>
        <th>電話</th>
        <th>賬號</th>
    </tr>
    </thead>
    <tbody>
    <tr th:each="user : ${list}">
        <!-- 將用戶的主鍵 uId 存在在 name 屬性中-->
        <td th:text="${user.id}"></td>
        <td th:text="${user.location}"></td>
        <!-- 使用dates對象格式化日期-->
        <td th:text="${user.detail}"></td>
        <!-- 三運運算判斷是否已婚-->
        <td th:text="${user.phone}"></td>
        <td th:text="${user.account}"></td>
    </tr>
    </tbody>
</table>
當前第 <span th:text="${list.pageNum}"></span> 頁.
總共 <span th:text="${list.pages}"></span> 頁.
一共 <span th:text="${list.total}"></span> 條記錄
<a th:href="@{/page/list?pn=1}" rel="external nofollow" >首頁</a>
<a th:href="@{'/page/list?pn='+${list.pageNum-1}}" rel="external nofollow" >上一頁</a>
<a th:href="@{'/page/list?pn='+${list.pageNum+1}}" rel="external nofollow" >下一頁</a>
<a th:href="@{'/page/list?pn='+${list.pages}}" rel="external nofollow" >尾頁</a>

</body>
</html>

訪問路徑//localhost:8082/page/list pn參數(shù)會默認會1 結(jié)果

在這里插入圖片描述

說明:上面的${list.pageNum},${list.pages},${list.total}等這些屬性都是屬于list的,此時這個list是被分頁后的列表,是從service層傳回來的pageInfo分頁列表。

在這里插入圖片描述

而這個被pageHelper插件處理后的pageInfo列表具有諸多屬性。

pageInfo類說明(源碼分析)

public class PageInfo<T> implements Serializable {
    private static final long serialVersionUID = 1L;
    //當前頁
    private int pageNum;
    //每頁的數(shù)量
    private int pageSize;
    //當前頁的數(shù)量
    private int size;
 
    //由于startRow和endRow不常用,這里說個具體的用法
    //可以在頁面中"顯示startRow到endRow 共size條數(shù)據(jù)"
 
    //當前頁面第一個元素在數(shù)據(jù)庫中的行號
    private int startRow;
    //當前頁面最后一個元素在數(shù)據(jù)庫中的行號
    private int endRow;
    //總記錄數(shù)
    private long total;
    //總頁數(shù)
    private int pages;
    //結(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;
    //導航頁碼數(shù)
    private int navigatePages;
    //所有導航頁號
    private int[] navigatepageNums;
    //導航條上的第一頁
    private int navigateFirstPage;
    //導航條上的最后一頁
    private int navigateLastPage;
 
    public PageInfo() {
    }
 
    /**
     * 包裝Page對象
     *
     * @param list
     */
    public PageInfo(List<T> list) {
        this(list, 8);
    }
 
    /**
     * 包裝Page對象
     *
     * @param list          page結(jié)果
     * @param navigatePages 頁碼數(shù)量
     */
    public PageInfo(List<T> list, int navigatePages) {
        if (list instanceof Page) {
            Page page = (Page) list;
            this.pageNum = page.getPageNum();
            this.pageSize = page.getPageSize();
 
            this.pages = page.getPages();
            this.list = page;
            this.size = page.size();
            this.total = page.getTotal();
            //由于結(jié)果是>startRow的,所以實際的需要+1
            if (this.size == 0) {
                this.startRow = 0;
                this.endRow = 0;
            } else {
                this.startRow = page.getStartRow() + 1;
                //計算實際的endRow(最后一頁的時候特殊)
                this.endRow = this.startRow - 1 + this.size;
            }
        } else if (list instanceof Collection) {
            this.pageNum = 1;
            this.pageSize = list.size();
 
            this.pages = this.pageSize > 0 ? 1 : 0;
            this.list = list;
            this.size = list.size();
            this.total = list.size();
            this.startRow = 0;
            this.endRow = list.size() > 0 ? list.size() - 1 : 0;
        }
        if (list instanceof Collection) {
            this.navigatePages = navigatePages;
            //計算導航頁
            calcNavigatepageNums();
            //計算前后頁,第一頁,最后一頁
            calcPage();
            //判斷頁面邊界
            judgePageBoudary();
        }
    }
.......
}

這里只列出所有屬性和構(gòu)造方法,那么可以清晰的看到一些屬性的含義,一些屬性是如何初始化,并且初始化值是怎樣的,更多詳細情況可以自己去查看源碼。

以上的分頁需求,可以非常方便的使用。 項目經(jīng)理再也不用擔心我的分頁了!

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

相關(guān)文章

  • Java讀寫文件,在文件中搜索內(nèi)容,并輸出含有該內(nèi)容的所有行方式

    Java讀寫文件,在文件中搜索內(nèi)容,并輸出含有該內(nèi)容的所有行方式

    這篇文章主要介紹了Java讀寫文件,在文件中搜索內(nèi)容,并輸出含有該內(nèi)容的所有行方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 又一波Java專業(yè)人士必備書籍來襲

    又一波Java專業(yè)人士必備書籍來襲

    又一波Java專業(yè)人士必備書籍來襲,這篇文章主要向大家推薦了Java專業(yè)人士必讀的書,感興趣的小伙伴們不要錯過
    2016-09-09
  • Java如何實現(xiàn)單鏈表的增刪改查

    Java如何實現(xiàn)單鏈表的增刪改查

    這篇文章主要給大家介紹了關(guān)于Java如何實現(xiàn)單鏈表的增刪改查的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • springboot?vue項目管理后端實現(xiàn)接口新增

    springboot?vue項目管理后端實現(xiàn)接口新增

    這篇文章主要為大家介紹了springboot?vue項目管理后端實現(xiàn)接口新增,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • 詳解SpringSecurity中的Authentication信息與登錄流程

    詳解SpringSecurity中的Authentication信息與登錄流程

    這篇文章主要介紹了SpringSecurity中的Authentication信息與登錄流程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Java 實現(xiàn)Excel文檔添加超鏈接的代碼

    Java 實現(xiàn)Excel文檔添加超鏈接的代碼

    超鏈接即內(nèi)容鏈接,通過給特定對象設(shè)置超鏈接,可實現(xiàn)載體與特定網(wǎng)頁、文件、郵件、網(wǎng)絡(luò)等的鏈接,點擊鏈接載體可打開鏈接目標,在文檔處理中是一種比較常用的功能,本文將介紹通過Java程序給Excel文檔添加超鏈接的方法,感興趣的朋友一起看看吧
    2020-02-02
  • 使用lombok@Data啟動項目報錯問題及解決

    使用lombok@Data啟動項目報錯問題及解決

    在使用Lombok時,可能會遇到實體類中的@Data注解不生效,導致get方法找不到的問題,解決這一問題通常需要三個步驟:首先,檢查項目設(shè)置中編譯規(guī)則是否勾選;其次,確認IDE中是否安裝了Lombok插件
    2024-10-10
  • 獲取Java線程轉(zhuǎn)儲的常用方法(推薦)

    獲取Java線程轉(zhuǎn)儲的常用方法(推薦)

    這篇文章主要介紹了獲取Java線程轉(zhuǎn)儲的常用方法,本文給大家介紹的非常想詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • java線性表排序示例分享

    java線性表排序示例分享

    這篇文章主要介紹了java線性表排序示例,需要的朋友可以參考下
    2014-03-03
  • Java使用itext5實現(xiàn)生成多個PDF并合并

    Java使用itext5實現(xiàn)生成多個PDF并合并

    這篇文章主要為大家詳細介紹了Java如何使用itext5實現(xiàn)生成多個PDF并合并,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-04-04

最新評論

白山市| 巨鹿县| 九龙城区| 靖远县| 晋城| 岱山县| 无棣县| 张家口市| 延边| 囊谦县| 南川市| 聊城市| 无为县| 通渭县| 嘉鱼县| 天长市| 綦江县| 鹿泉市| 通许县| 海城市| 平度市| 沾益县| 元氏县| 象山县| 郸城县| 阿坝县| 康马县| 宜兰县| 民县| 襄樊市| 广宗县| 齐齐哈尔市| 常山县| 西峡县| 长葛市| 阳谷县| 婺源县| 青岛市| 崇明县| 土默特右旗| 深州市|