PageHelper在springboot+mybatis框架中的使用步驟及原理解析
一、思路
將分頁(yè)所需的內(nèi)容都放到一個(gè)實(shí)體類中
分頁(yè)數(shù)據(jù)所需要的實(shí)體類!內(nèi)包含頁(yè)碼,頁(yè)大小,總條數(shù),總頁(yè)數(shù),起始行
pagehelpr提供了這個(gè)類 pageInfo,不需要我們自己創(chuàng)建
二、主要邏輯
select * from 表名 limit 起始行,展示幾條數(shù)據(jù)
#第n頁(yè) 每頁(yè)展示五條數(shù)據(jù)
select * from 表名 limit (n-1)*5,5
#每頁(yè)展示多少條 pageSize
3
#總共有多少條
total
select count(*) from 表名
#總頁(yè)數(shù)
pages
pages=total%pagesSize==0?total/pgeSize:total/pageSize+1;
#當(dāng)前頁(yè)
pageNum
三、步驟
1.引入pagehelper依賴
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>#pagehelper分頁(yè)插件配置 pagehelper.helper-dialect=mysql pagehelper.reasonable=true pagehelper.support-methods-arguments=true pagehelper.params=count=countSql
2.bean實(shí)體類
用戶實(shí)體:
package com.qianfeng.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Register {
private Integer id;
private String userName;
private String passWord;
private String rePassWord;
private String idCard;
private String gender;
}返回前端的實(shí)體類:包括查到的數(shù)據(jù)和分頁(yè)數(shù)據(jù)
package com.qianfeng.bean;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.util.List;
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class RegPage {
private PageInfo pageInfo;
private List<Register> registers;
}2.mapper層:
package com.qianfeng.mapper;
import com.qianfeng.bean.Register;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface PageDao {
List<Register> getAll(Integer startRow,Integer pageSize);
long getCount();
}3.service層:
package com.qianfeng.service;
import com.github.pagehelper.PageInfo;
import com.qianfeng.bean.RegPage;
public interface RegService {
RegPage getAll(PageInfo pageInfo);
}4.serviceImpl:
package com.qianfeng.service.serviceImpl;
import com.github.pagehelper.PageInfo;
import com.qianfeng.bean.RegPage;
import com.qianfeng.bean.Register;
import com.qianfeng.mapper.PageDao;
import com.qianfeng.service.RegService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class RegServiceImpl implements RegService {
@Autowired
private PageDao pageDao;
@Override
public RegPage getAll(PageInfo pageInfo) {
List<Register> all = pageDao.getAll(pageInfo.getStartRow(), pageInfo.getPageSize());//分頁(yè)后的數(shù)據(jù)
long count = pageDao.getCount();//總記錄條數(shù)
pageInfo.setTotal(count);
//總頁(yè)數(shù)
int pages= (int) (pageInfo.getTotal()%pageInfo.getPageSize()==0?pageInfo.getTotal()/pageInfo.getPageSize():pageInfo.getTotal()/pageInfo.getPageSize()+1);
pageInfo.setPages(pages);
RegPage regPage = new RegPage();
regPage.setPageInfo(pageInfo);
regPage.setRegisters(all);
return regPage;
}
}
5.handler層:
package com.qianfeng.handler;
import com.github.pagehelper.PageInfo;
import com.qianfeng.bean.RegPage;
import com.qianfeng.service.RegService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RegHandler {
@Autowired
private RegService regService;
@RequestMapping("/page/{pageNum}")
public RegPage regPage(@PathVariable("pageNum") Integer pageNum){
System.out.println(".........");
PageInfo pageInfo = new PageInfo();
pageInfo.setPageNum(pageNum);
pageInfo.setPageSize(3);
pageInfo.setStartRow((pageNum-1)*pageInfo.getPageSize());
System.out.println("startRow" + pageInfo.getStartRow());
return regService.getAll(pageInfo);
}
}6.mapper.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.qianfeng.mapper.PageDao">
<select id="getAll" resultType="com.qianfeng.bean.Register">
select * from m_register limit #{startRow},#{pageSize}
</select>
<select id="getCount" resultType="java.lang.Long">
select count(*) from m_register
</select>
</mapper>7.application.yaml
spring:
datasource:
url: jdbc:mysql:///map?serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: 123
driver-class-name: com.mysql.jdbc.Driver
druid:
aop-patterns: com.qianfeng.* #監(jiān)控SpringBean
filters: stat,wall # 底層開(kāi)啟功能,stat(sql監(jiān)控),wall(防火墻)
stat-view-servlet: # 配置監(jiān)控頁(yè)功能
enabled: true
login-username: admin
login-password: admin
resetEnable: false
web-stat-filter: # 監(jiān)控web
enabled: true
urlPattern: /*
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
filter:
stat: # 對(duì)上面filters里面的stat的詳細(xì)配置
slow-sql-millis: 1000
logSlowSql: true
enabled: true
wall:
enabled: true
config:
drop-table-allow: false
mvc:
pathmatch:
matching-strategy: ant_path_matcher
# mybatis的配置規(guī)則
mybatis:
#config-location: classpath:mapper/mybatis-config.xml
mapper-locations: classpath:mapper/*
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# static-locations: [classpath:/haha/] # 靜態(tài)資源路徑自定義
8.application,properties
spring.main.allow-circular-references=true spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html pagehelper.helper-dialect=mysql pagehelper.reasonable=true pagehelper.support-methods-arguments=true pagehelper.params=count=countSql
關(guān)于PageInfo這個(gè)類,源碼如下:
public class PageInfo implements Serializable {
private static final long serialVersionUID = 1L;
//當(dāng)前頁(yè)
private int pageNum;
//每頁(yè)的數(shù)量
private int pageSize;
//當(dāng)前頁(yè)的數(shù)量
private int size;
//由于startRow 和endRow 不常用,這里說(shuō)個(gè)具體的用法
//可以在頁(yè)面中"顯示startRow 到endRow 共size 條數(shù)據(jù)"
//當(dāng)前頁(yè)面第一個(gè)元素在數(shù)據(jù)庫(kù)中的行號(hào)
private int startRow;
//當(dāng)前頁(yè)面最后一個(gè)元素在數(shù)據(jù)庫(kù)中的行號(hào)
private int endRow;
//總記錄數(shù)
private long total;
//總頁(yè)數(shù)
private int pages;
//結(jié)果集
private List list;
//前一頁(yè)
private int prePage;
//下一頁(yè)
private int nextPage;
//是否為第一頁(yè)
private boolean isFirstPage = false;
//是否為最后一頁(yè)
private boolean isLastPage = false;
//是否有前一頁(yè)
private boolean hasPreviousPage = false;
//是否有下一頁(yè)
private boolean hasNextPage = false;
//導(dǎo)航頁(yè)碼數(shù)
private int navigatePages;
//所有導(dǎo)航頁(yè)號(hào)
private int[] navigatepageNums;
//導(dǎo)航條上的第一頁(yè)
private int navigateFirstPage;
//導(dǎo)航條上的最后一頁(yè)
private int navigateLastPage;
}目錄結(jié)構(gòu):

到此這篇關(guān)于PageHelper在springboot+mybatis框架中的使用步驟及原理的文章就介紹到這了,更多相關(guān)PageHelper在springboot+mybatis框架使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot使用PageHelper插件實(shí)現(xiàn)Mybatis分頁(yè)效果
- springboot?+mybatis?使用PageHelper實(shí)現(xiàn)分頁(yè)并帶條件模糊查詢功能
- SpringBoot+Mybatis分頁(yè)插件PageHelper實(shí)現(xiàn)分頁(yè)效果
- SpringBoot整合mybatis結(jié)合pageHelper插件實(shí)現(xiàn)分頁(yè)
- SpringBoot集成MyBatis的分頁(yè)插件PageHelper實(shí)例代碼
- Springboot?Mybatis使用pageHelper如何實(shí)現(xiàn)分頁(yè)查詢
相關(guān)文章
使用SpringBoot+OkHttp+fastjson實(shí)現(xiàn)Github的OAuth第三方登錄
這篇文章主要介紹了使用SpringBoot+OkHttp+fastjson實(shí)現(xiàn)Github的OAuth第三方登錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
基于Java編寫(xiě)一個(gè)粽子大作戰(zhàn)小游戲
端午節(jié),又稱龍舟節(jié)、重午節(jié),是中國(guó)的傳統(tǒng)節(jié)日之一,每年農(nóng)歷五月初五慶祝,雖然端午假期已經(jīng)過(guò)去了,小編還是用Java編寫(xiě)了一個(gè)粽子大作戰(zhàn)小游戲,感興趣的可以了解一下2023-06-06
IDEA插件Statistic統(tǒng)計(jì)代碼快速分辨爛項(xiàng)目
這篇文章主要為大家介紹了使用IDEA插件Statistic來(lái)統(tǒng)計(jì)項(xiàng)目代碼,幫助大家快速識(shí)別出爛項(xiàng)目,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-01-01
Spring Cloud LoadBalancer 負(fù)載均衡詳解
本文介紹了如何在Spring Cloud中使用SpringCloudLoadBalancer實(shí)現(xiàn)客戶端負(fù)載均衡,并詳細(xì)講解了輪詢策略和隨機(jī)策略的配置方法,此外,還提供了部署到云服務(wù)器并在多個(gè)實(shí)例之間進(jìn)行負(fù)載均衡的步驟,感興趣的朋友一起看看吧2025-02-02
基于java實(shí)現(xiàn)斗地主代碼實(shí)例解析
這篇文章主要介紹了基于java實(shí)現(xiàn)斗地主代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
springboot使用TaskScheduler實(shí)現(xiàn)動(dòng)態(tài)增刪啟停定時(shí)任務(wù)方式
這篇文章主要介紹了springboot使用TaskScheduler實(shí)現(xiàn)動(dòng)態(tài)增刪啟停定時(shí)任務(wù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
Java實(shí)現(xiàn)簡(jiǎn)單密碼加密功能
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單密碼加密功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03

