PageHelper在springboot+mybatis框架中的使用步驟及原理解析
一、思路
將分頁所需的內(nèi)容都放到一個(gè)實(shí)體類中
分頁數(shù)據(jù)所需要的實(shí)體類!內(nèi)包含頁碼,頁大小,總條數(shù),總頁數(shù),起始行
pagehelpr提供了這個(gè)類 pageInfo,不需要我們自己創(chuàng)建
二、主要邏輯
select * from 表名 limit 起始行,展示幾條數(shù)據(jù)
#第n頁 每頁展示五條數(shù)據(jù)
select * from 表名 limit (n-1)*5,5
#每頁展示多少條 pageSize
3
#總共有多少條
total
select count(*) from 表名
#總頁數(shù)
pages
pages=total%pagesSize==0?total/pgeSize:total/pageSize+1;
#當(dāng)前頁
pageNum
三、步驟
1.引入pagehelper依賴
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>#pagehelper分頁插件配置 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ù)和分頁數(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());//分頁后的數(shù)據(jù)
long count = pageDao.getCount();//總記錄條數(shù)
pageInfo.setTotal(count);
//總頁數(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 # 底層開啟功能,stat(sql監(jiān)控),wall(防火墻)
stat-view-servlet: # 配置監(jiān)控頁功能
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: # 對上面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)前頁
private int pageNum;
//每頁的數(shù)量
private int pageSize;
//當(dāng)前頁的數(shù)量
private int size;
//由于startRow 和endRow 不常用,這里說個(gè)具體的用法
//可以在頁面中"顯示startRow 到endRow 共size 條數(shù)據(jù)"
//當(dāng)前頁面第一個(gè)元素在數(shù)據(jù)庫中的行號
private int startRow;
//當(dāng)前頁面最后一個(gè)元素在數(shù)據(jù)庫中的行號
private int endRow;
//總記錄數(shù)
private long total;
//總頁數(shù)
private int pages;
//結(jié)果集
private List 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;
}目錄結(jié)構(gòu):

到此這篇關(guān)于PageHelper在springboot+mybatis框架中的使用步驟及原理的文章就介紹到這了,更多相關(guān)PageHelper在springboot+mybatis框架使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IntelliJ IDEA中如何調(diào)試Java Stream操作
這篇文章主要介紹了IntelliJ IDEA中如何優(yōu)雅的調(diào)試Java Stream操作,在強(qiáng)大的IDEA插件支持下,stream的調(diào)試其實(shí)也沒那么難了,下面就來學(xué)習(xí)一下在IDEA中如何調(diào)試stream操作吧2022-05-05
Spring AOP有多少個(gè)通知以及它們的執(zhí)行順序介紹
java?stream實(shí)現(xiàn)分組BigDecimal求和以及自定義分組求和
利用Spring JPA中的@Version注解實(shí)現(xiàn)樂觀鎖
從Myeclipse 導(dǎo)入到eclipse中無法識別為 web項(xiàng)目 問題的解決步驟

