当前位置:网站首页>PageHelper还能结合Lambda表达式实现简洁的分页封装
PageHelper还能结合Lambda表达式实现简洁的分页封装
2022-07-25 17:42:00 【一恍过去】
1、引入POM
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.2</version>
</dependency>
2、封装PageBean
创建查询分页类BaseQueryParam,其需要传递的查询参数类,可以直接进行继承,代码如下:
@Data
public class BaseQueryParam {
/** * 当前页码 */
private Integer pageNum;
/** * 每页数量 */
private Integer pageSize;
}
封装新的PageBean,利用泛型封装统一的请求方法与响应分页信息参数,代码如下:
import com.github.pagehelper.ISelect;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import java.util.List;
public class NewPageBean<T> {
private Long total;
private List<T> list;
private MyPage pageInfo;
/** * @param select 调用Mapper接口的结果 * @param param 请求参数 * @param tClass 响应的Class对象 * @param <T> * @return */
public static <T> NewPageBean<T> generatePage(ISelect select, BaseQueryParam param, Class<T> tClass) {
Integer current = param.getPageNum();
Integer pageSize = param.getPageSize();
List<T> list = PageHelper
.startPage(current == null ? 1 : current, pageSize == null ? 10 : pageSize)
.doSelectPage(select);
return new NewPageBean<>(list);
}
public NewPageBean(List<T> list) {
PageInfo<T> pageInfo = new PageInfo<>(list);
this.total = pageInfo.getTotal();
this.list = list;
MyPage page = new MyPage();
page.setTotalPage(pageInfo.getPages());
page.setPageNum(pageInfo.getPageNum());
page.setPageSize(pageInfo.getPageSize());
page.setPreviousPage(pageInfo.getPrePage());
page.setNextPage(pageInfo.getNextPage());
this.pageInfo = page;
}
public long getNum() {
return this.total;
}
public void setNum(Long total) {
this.total = total;
}
public Long getTotal() {
return total;
}
public void setTotal(Long total) {
this.total = total;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public MyPage getPageInfo() {
return pageInfo;
}
public void setPageInfo(MyPage pageInfo) {
this.pageInfo = pageInfo;
}
static class MyPage {
private int pageNum;
private int pageSize;
private int totalPage;
private int nextPage;
private int previousPage;
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getNextPage() {
return nextPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
public int getPreviousPage() {
return previousPage;
}
public void setPreviousPage(int previousPage) {
this.previousPage = previousPage;
}
}
}
3、用法
3.1 定义Mapper
@Mapper
public interface TaskMapper {
List<Task> list(BaseQueryParam param);
}
3.2 定义Mapping
<?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.mapper.TaskMapper">
<select id="list" parameterType="com.lhz.controller.page.BaseQueryParam" resultMap="BaseResultMap">
select
id,name,create_by,create_time,update_by,update_time,remark
from sys_task
</select>
</mapper>
3.3 具体实现
此处不写servce,层,方便演示直接在Controller中调用Mapper
@RestController
public class TaskController {
@Resource
private TaskMapper taskMapper;
@GetMapping("test")
public Object test(BaseQueryParam param) {
/** * BaseQueryParam 就是查询的参数 * Task 为响应的实体 */
return NewPageBean.generatePage(() -> taskMapper.list(param), param, Task.class);
}
}
4、测试
测试url:http://localhost:9090/demo/test?pageNum=2&pageSize=2
SQL预览:
返回结果:
{
"total":3,
"list":[
{
"id":"1",
"name":"定时任务一",
"createBy":"1",
"createTime":1601178428000,
"updateBy":"1",
"updateTime":1601178428000,
"remark":""
},
{
"id":"2",
"name":"定时任务二",
"createBy":"1",
"createTime":1601178546000,
"updateBy":"1",
"updateTime":1601178546000,
"remark":""
}
],
"pageInfo":{
"pageNum":1,
"pageSize":2,
"totalPage":2,
"nextPage":2,
"previousPage":0
},
"num":3
}
边栏推荐
- ROS learning notes (IV) ROS cannot solve rosdep init or update
- 无聊发文吐槽工作生活
- [cadence Allegro PCB design] error: possible pin type conflict gnd/vcc power connected to output
- go channel简单笔记
- Calculation date or date formatting
- An article about ultrasonic humidifier
- go语言context控制函数执行超时返回
- EDI docking commercehub orderstream
- 咨询下flink sql-client怎么处理DDL后,fink sql里面映射表加字段以及JOb?
- stm32F407------SPI
猜你喜欢

How to install govendor and open a project

POWERBOARD coco! Dino: let target detection embrace transformer

食品安全 | 八问八答带你重新认识小龙虾!这样吃才对!

WPF 实现用户头像选择器

Three dimensional function display of gray image

Highlights

Starting from business needs, open the road of efficient IDC operation and maintenance

window10系统下nvm的安装步骤以及使用方法

11. Camera and lens

我也是醉了,Eureka 延迟注册还有这个坑!
随机推荐
电子产品EMC不合格,如何整改?
How to fix the first row title when scrolling down in Excel table / WPS table?
STM32 PAJ7620U2手势识别模块(IIC通信)程序源码详解
New and malloc
Beyond convnext, replknet | look 51 × 51 convolution kernel how to break ten thousand volumes!
EDI 对接CommerceHub OrderStream
【硬件工程师】DC-DC隔离式开关电源模块为什么会用到变压器?
生成扩散模型漫谈:DDPM = 贝叶斯 + 去噪
Which one of the electronic products has a longer service life??
Cet
面试官:说说 log.Fatal 和 panic 的区别
postgreSQL 密码区分大小写 ,有参数控制吗?
Principle and implementation of UDP penetration NAT in P2P
How to rectify the unqualified EMC of electronic products?
11、照相机与透镜
HCIP第一天实验
mysql case when
What financial products can you buy to make money with only 1000 yuan?
食品安全 | 八问八答带你重新认识小龙虾!这样吃才对!
自动化测试 PO设计模型