当前位置:网站首页>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
}
边栏推荐
- EDI 对接CommerceHub OrderStream
- mysql case when
- 理财有保本产品吗?
- 哈夫曼树的构建
- Redis源码与设计剖析 -- 18.Redis网络连接库分析
- 超越 ConvNeXt、RepLKNet | 看 51×51 卷积核如何破万卷!
- Which one of the electronic products has a longer service life??
- Cross validation (CV) learning notes
- go接口变量的类型断言
- Starting from business needs, open the road of efficient IDC operation and maintenance
猜你喜欢
随机推荐
「数字安全」警惕 NFT的七大骗局
8 年产品经验,我总结了这些持续高效研发实践经验 · 研发篇
Automated test Po design model
new与malloc
New and malloc
Update 3dcat real time cloud rendering V2.1.2 release
【硬件工程师】DC-DC隔离式开关电源模块为什么会用到变压器?
Calculation date or date formatting
ACL 2022 | comparative learning based on optimal transmission to achieve interpretable semantic text similarity
PostgreSQL里有只编译语句但不执行的方法吗?
[solution] the Microsoft edge browser has the problem of "unable to access this page"
Step by step introduction of sqlsugar based development framework (13) -- package the upload component based on elementplus, which is convenient for the project
Highlights
博后招募 | 西湖大学机器智能实验室招聘博士后/助理研究员/科研助理
pgsql有没有好用的图形化管理工具?
【硬件工程师】关于信号电平驱动能力
I2C communication - sequence diagram
做智能硬件要考虑的产品生命周期
Function name pointer and function pointer
03.无重复字符的最长子串









