PageHelper在springboot+mybatis框架中的使用步骤及原理解析
作者:全国青少年熬夜大赛冠军 时间:2023-07-28 21:40:09
一、思路
将分页所需的内容都放到一个实体类中
分页数据所需要的实体类!内包含页码,页大小,总条数,总页数,起始行
pagehelpr提供了这个类 pageInfo,不需要我们自己创建
二、主要逻辑
select * from 表名 limit 起始行,展示几条数据
#第n页 每页展示五条数据
select * from 表名 limit (n-1)*5,5
#每页展示多少条 pageSize
3
#总共有多少条
total
select count(*) from 表名
#总页数
pages
pages=total%pagesSize==0?total/pgeSize:total/pageSize+1;
#当前页
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实体类
用户实体:
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;
}
返回前端的实体类:包括查到的数据和分页数据
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());//分页后的数据
long count = pageDao.getCount();//总记录条数
pageInfo.setTotal(count);
//总页数
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.* #监控SpringBean
filters: stat,wall # 底层开启功能,stat(sql监控),wall(防火墙)
stat-view-servlet: # 配置监控页功能
enabled: true
login-username: admin
login-password: admin
resetEnable: false
web-stat-filter: # 监控web
enabled: true
urlPattern: /*
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
filter:
stat: # 对上面filters里面的stat的详细配置
slow-sql-millis: 1000
logSlowSql: true
enabled: true
wall:
enabled: true
config:
drop-table-allow: false
mvc:
pathmatch:
matching-strategy: ant_path_matcher
# mybatis的配置规则
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/] # 静态资源路径自定义
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
关于PageInfo这个类,源码如下:
public class PageInfo implements Serializable {
private static final long serialVersionUID = 1L;
//当前页
private int pageNum;
//每页的数量
private int pageSize;
//当前页的数量
private int size;
//由于startRow 和endRow 不常用,这里说个具体的用法
//可以在页面中"显示startRow 到endRow 共size 条数据"
//当前页面第一个元素在数据库中的行号
private int startRow;
//当前页面最后一个元素在数据库中的行号
private int endRow;
//总记录数
private long total;
//总页数
private int pages;
//结果集
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;
//导航页码数
private int navigatePages;
//所有导航页号
private int[] navigatepageNums;
//导航条上的第一页
private int navigateFirstPage;
//导航条上的最后一页
private int navigateLastPage;
}
目录结构:
来源:https://blog.csdn.net/mwenhui/article/details/129113956
标签:PageHelper,springboot,mybatis
0
投稿
猜你喜欢
java多线程模拟抢红包功能
2023-07-25 01:09:58
java微信开发API第一步 服务器接入
2023-08-24 11:18:26
Spring事务失效的一种原因关于this调用的问题
2022-07-19 20:59:21
java查询mongodb中的objectid示例
2022-03-06 08:59:21
详解LINQ入门(下篇)
2021-10-09 16:41:29
基于hibernate框架在eclipse下的配置方法(必看篇)
2022-11-09 20:30:26
Java多线程之Worker Thread模式
2021-06-11 12:11:51
Java代码实现酒店管理系统
2023-08-13 13:09:23
使用JSON.toJSONString格式化成json字符串时保留null属性
2023-05-10 14:56:34
Java锁之可重入锁介绍
2021-06-01 03:05:19
解决RestTemplate 请求url中包含百分号 会被转义成25的问题
2022-11-01 22:59:51
Java实现数据库连接池的方法
2023-11-28 08:57:30
C#文件合并的方法
2022-08-07 13:22:17
WPF如何绘制光滑连续贝塞尔曲线示例代码
2022-06-07 18:31:58
深入解析C#中的泛型类与泛型接口
2023-04-30 02:35:39
SpringBoot如何用java生成静态html
2023-08-08 08:46:59
Android实现手机壁纸改变的方法
2022-06-03 07:41:46
C语言连续生成多个随机数实现可限制范围
2023-08-24 08:35:06
android基于SwipeRefreshLayout实现类QQ的侧滑删除
2023-05-22 14:49:19
Mybatis利用OGNL表达式处理动态sql的方法教程
2022-11-26 22:22:02