pagehelper 分页写法

依赖

复制代码
     <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.3</version>
        </dependency>

工具类

复制代码
import com.first.pet.vo.BasePageReq;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;

/**
 * @author yangquan
 * @since 2023-09-18
 */
public class PageInfoUtils {

    /**
     * pageInfo泛型转换
     */
    public static <T, R> PageInfo<R> convert(PageInfo<T> pageInfo, Function<T, R> function) {
        Page<T> page = (Page<T>) pageInfo.getList();
        PageInfo<R> newPageInfo = page.toPageInfo(function::apply);
        newPageInfo.setTotal(page.getTotal());
        return newPageInfo;
    }

    /**
     * pageInfo泛型转换
     */
    public static <T> PageInfo<T> of(Integer num, Integer size, Long total, List<T> list) {
        PageInfo<T> result = new PageInfo<>();
        result.setPageNum(num);
        result.setPageSize(size);
        result.setTotal(total);
        result.setList(list);
        return result;
    }

    public static <T> PageInfo<T> emptyPageInfo(BasePageReq basePageReq) {
        PageInfo<T> pageInfo = new PageInfo<>();
        pageInfo.setPageNum(basePageReq.getPageNum());
        pageInfo.setPageSize(basePageReq.getPageSize());
        pageInfo.setList(new ArrayList<>());
        return pageInfo;
    }

}

分页参数

复制代码
/**
 * 资源信息分页查询DTO
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BasePageReq implements Serializable {

    @ApiModelProperty("第几页")
    @Min(value = 1, message = "分页参数错误,页码不应小于1条")
    private Integer pageNum;

    @ApiModelProperty("每页显示几条")
    @Min(value = 1, message = "分页参数错误,条数不应小于1条")
    @Max(value = 1000, message = "分页参数错误,条数应小于1000条")
    private Integer pageSize;
}



/**
 * @author yangquan
 * @since 2023-09-17
 */
@ApiModel("管理员信息查询入参")
@Data
public class PlatformManagerUserReq extends BasePageReq {
    /**
     * 手机号
     */
    @ApiModelProperty("手机号")
    private String phone;

    /**
     * 角色Id
     */
    @ApiModelProperty("角色Id")
    private Integer roleId;

    public PlatformManagerUserReq(Integer pageNum, Integer size, String phone, Integer roleId) {
        super(pageNum, size);
        this.phone = phone;
        this.roleId = roleId;
    }
}

写法1、

复制代码
    @Override
    public PageInfo<PlatformRole> getPlatformRoleList(PlatformRoleReq platformRoleReq) {
    //第一种写法   使用mybatis-plus的写法
        QueryWrapper<PlatformRole> roleRespWrapper = new QueryWrapper<>();
        roleRespWrapper.eq(StringUtils.isNotBlank(platformRoleReq.getRoleName()), "role_name", platformRoleReq.getRoleName());
        //设置当前页以及每页记录数
        PageInfo<PlatformRole> pageInfo = PageHelper.startPage(platformRoleReq.getPageNum(), platformRoleReq.getSize()).doSelectPageInfo(() ->
                platformRoleMapper.selectList(roleRespWrapper));
                第二种写法  使用自己写sql的方式
//        PageInfo<PlatformRole> pageInfo = PageHelper.startPage(platformRoleReq.getPageNum(), platformRoleReq.getSize()).doSelectPageInfo(() ->
//                platformRoleMapper.selectbyRoleId(platformRoleReq));
        if (pageInfo.getTotal() == 0) {
            return PageInfoUtils.emptyPageInfo(platformRoleReq.getPageNum(), platformRoleReq.getSize());
        }
        return pageInfo;
    }

写法2、

复制代码
    @Override
    public PageInfo<PlatformManagerUserResp> managerUserList(PlatformManagerUserReq platformManagerUserReq) {
        if (StringUtils.isNotBlank(platformManagerUserReq.getPhone())) {
            platformManagerUserReq.setPhone(EncryptUtils.encryptPhoneIdCard(platformManagerUserReq.getPhone()));
        }
        //设置当前页以及每页记录数
        PageInfo<PlatformManagerUserResp> pageInfo = PageHelper.startPage(platformManagerUserReq.getPageNum(), platformManagerUserReq.getPageSize()).doSelectPageInfo(() ->
                platformManagerUserMapper.managerUserList(platformManagerUserReq));
        if (pageInfo.getTotal() == 0) {
            return PageInfoUtils.emptyPageInfo(platformManagerUserReq);
        }
        return PageInfoUtils.convert(pageInfo, this::platformManagerUserResp);
    }


    /**
     * 数据转换
     *
     * @param platformManagerUserResp
     * @return
     */
    private PlatformManagerUserResp platformManagerUserResp(PlatformManagerUserResp platformManagerUserResp) {
        platformManagerUserResp.setPhone(EncryptUtils.decryptPhoneIdCard(platformManagerUserResp.getPhone()));
        return platformManagerUserResp;
    }

这辈子坚持与不坚持都不可怕,怕的是独自走在坚持的道路上。。。

相关推荐
xiaoqiMikko5 分钟前
JVM 线上排查实战(七):jps 看不见它、jstack 连不上它,可它明明活得好好的
java·jvm
狼爷1 小时前
Rust/Go/Java/Python/PHP 大比拼:负载下后端框架到底差多少?
java·后端·编程语言
念何架构之路1 小时前
zap扩展生态与总结
java·前端·数据库
第七页独白2 小时前
汽车零件厂如何通过 QMS 真正落地 IATF 16949——QMS软件系统:品质检验-内审稽核-8d客诉管理:全星质量管理软件系统
java·前端·数据库
QCoding2 小时前
Spring AI Alibaba Graph实战:从ReAct Agent到Workflow,企业AI复杂流程该如何编排?
java·人工智能
用户094248568032 小时前
第25章:Java虚拟线程(Project Loom)实战与调度协作
java·jvm
砚底藏山河2 小时前
量化实战:截面因子有效性检验(IC 分析与分层回测)
java·python·金融·maven
wuminyu2 小时前
ForkJoinPool内部WorkQueue的Lock-Free数组操作以及并发任务窃取原理剖析
java·linux·c语言·jvm·c++
Elastic 中国社区官方博客2 小时前
使用 Lucene 搜索你的 Bean — 索引
java·大数据·数据库·elasticsearch·搜索引擎·全文检索·lucene
code2cat2 小时前
Java进阶篇之AtomicMarkableReference:引用还在,标记已经改变
java·开发语言·cas·并发编程·逻辑删除