1、配置类注册mybatisplus核心插件,同时添加分页插件

@Configuration
public class MyBatisConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        //初始化核心插件
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //添加分页插件
        PaginationInnerInterceptor pageInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
        pageInterceptor.setMaxLimit(1000L);//设置分页上限
        interceptor.addInnerInterceptor(pageInterceptor);
        return interceptor;
    }
}

2、测试分页

    @Test
    void queryUserPage(){
        int pageNum = 1;
        int pageSize = 5;
        Page<User> page = new Page<>(pageNum,pageSize);
        page.addOrder(new OrderItem("id",true));
        Page<User> userPage =userService.page(page);

        System.out.println("total"+userPage.getTotal());
        System.out.println("pages"+userPage.getPages());


        List<User> users= userPage.getRecords();
        users.forEach(System.out::println);

    }

3、简单分页查询案例

含有过滤条件

准备查询请求参数实体类
@Data
@ApiModel(description = "分页查询实体")
public class PageQuery {
    @ApiModelProperty("页码")
    private Integer pageNo = 1;
    @ApiModelProperty("每页条数")
    private Integer pageSize = 5;
    @ApiModelProperty("排序字段")
    private String sortBy;
    @ApiModelProperty("是否升序")
    private Boolean isASC = true;

    public <T> Page<T> toMpPage(OrderItem ... orderItems) {
        //构建分页条件
        Page<T> page = new Page<>(pageNo, pageSize);
        //排序条件
        if(sortBy != null){
            page.addOrder(new OrderItem(sortBy, isASC));
        }else if(orderItems != null){
            page.addOrder(orderItems);
        }
        return page;
    }
    public <T> Page<T> toMpPageDefaultSortById() {
        return toMpPage(new OrderItem("id", true));
    }
    public <T> Page<T> toMpPage(String defaultSortBy,Boolean defaultAsc) {
        return toMpPage(new OrderItem(defaultSortBy, defaultAsc));
    }
}

准备要分页的实体类继承分页实体

准备返回实体
@Data
@ApiModel(description = "分页结果")
public class PageResult<T> {
    @ApiModelProperty("总条数")
    private Long total;
    @ApiModelProperty("总页数")
    private Long pages;
    @ApiModelProperty("集合")
    private List<T> list;

    public  static <PO,VO> PageResult<VO> of(Page<PO> p,Class<VO> clazz){
        //封装vo
        PageResult<VO> pageResult = new PageResult<>();
        pageResult.setTotal(p.getTotal());
        pageResult.setPages(p.getPages());

        List<PO> records= p.getRecords();
        if(CollUtil.isEmpty(records)){
            pageResult.setList(Collections.emptyList());
            return pageResult;
        };
        pageResult.setList(BeanUtil.copyToList(records, clazz));
        //返回
        return  pageResult;
    }

    public  static <PO,VO> PageResult<VO> of(Page<PO> p, Function<PO,VO> convertor){
        //封装vo
        PageResult<VO> pageResult = new PageResult<>();
        pageResult.setTotal(p.getTotal());
        pageResult.setPages(p.getPages());

        List<PO> records= p.getRecords();
        if(CollUtil.isEmpty(records)){
            pageResult.setList(Collections.emptyList());
            return pageResult;
        };
        
        pageResult.setList(records.stream().map(convertor).collect(Collectors.toList()));
        //返回
        return  pageResult;
    }
}
serviceImpl
    @Override
    public PageResult queryUserPage(userRequest userRequest) {
        //构建分页条件
        Page<User> page =userRequest.toMpPageDefaultSortById();

        //构建查询条件
        Page<User> result =lambdaQuery()
                .like(userRequest.getUsername() != null, User::getUsername, userRequest.getUsername())
                .eq(userRequest.getStatus() != null, User::getStatus, userRequest.getStatus())
                .ge(userRequest.getMinMoney() != null, User::getMoney, userRequest.getMinMoney())
                .le(userRequest.getMaxMoney() != null, User::getMoney, userRequest.getMaxMoney())
                .page(page);
        //封装vo
        return PageResult.of(result,user -> {
            //拷贝基础属性
            userVo vo= BeanUtil.toBean(user, userVo.class);
            //特殊逻辑处理
            vo.setUsername(vo.getUsername().substring(0,vo.getUsername().length() - 2) + "**");
            return vo;
        });
    }

controller

    @ApiOperation("条件分页查询用户接口")
    @GetMapping("/page")
    public PageResult<userVo> queryUserPage(userRequest userRequest) {
        return userService.queryUserPage(userRequest);
    }

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐