当前位置: 首页 > article >正文

Spring Boot MyBatis-Plus 构建查询对象进行分页查询

本文档描述了如何在 Spring Boot 项目中使用 MyBatis-Plus 实现带有多条件查询和排序的分页功能。

1. 查询对象 (QueryDTO)

创建一个查询对象来封装所有查询参数:

package com.example.order.dto;

import lombok.Data;

@Data
public class InquiryOrderQueryDTO {
    // 排序字段
    private String sortField;
    // 排序方向 (true: 升序, false: 降序)
    private Boolean ascending = true;
    // 查询关键字
    private String keyword;
    // 状态
    private String status;
    // 开始时间
    private String startTime;
    // 结束时间
    private String endTime;
}

2. 控制器实现

package com.example.order.controller;

@RestController
@RequestMapping("/inquiryOrder")
public class InquiryOrderController {

    @Autowired
    private InquiryOrderService inquiryOrderService;

    @GetMapping("/code")
    public ApiResponse<IPage<Map<String, Object>>> getCode(
            @RequestParam(defaultValue = "1") int page,
            @RequestParam(defaultValue = "5") int size,
            InquiryOrderQueryDTO queryDTO) {

        Page<Map<String, Object>> orderPage = new Page<>(page, size);
        IPage<Map<String, Object>> inquiryOrders = inquiryOrderService.selectCode(orderPage, queryDTO);
        return ApiResponse.success(inquiryOrders);
    }
}

3. 服务层实现

package com.example.order.service.impl;

@Service
public class InquiryOrderServiceImpl extends ServiceImpl<InquiryOrderMapper, InquiryOrder>
    implements InquiryOrderService {

    @Override
    public IPage<Map<String, Object>> selectCode(Page<Map<String, Object>> page, InquiryOrderQueryDTO queryDTO) {
        QueryWrapper<InquiryOrder> queryWrapper = new QueryWrapper<>();
        
        // 添加查询条件
        if (StringUtils.hasText(queryDTO.getKeyword())) {
            queryWrapper.like("code", queryDTO.getKeyword())
                    .or()
                    .like("name", queryDTO.getKeyword());
        }

        // 添加状态查询
        if (StringUtils.hasText(queryDTO.getStatus())) {
            queryWrapper.eq("status", queryDTO.getStatus());
        }

        // 添加时间范围查询
        if (StringUtils.hasText(queryDTO.getStartTime())) {
            queryWrapper.ge("create_time", queryDTO.getStartTime());
        }
        if (StringUtils.hasText(queryDTO.getEndTime())) {
            queryWrapper.le("create_time", queryDTO.getEndTime());
        }

        // 添加排序
        if (StringUtils.hasText(queryDTO.getSortField())) {
            if (Boolean.TRUE.equals(queryDTO.getAscending())) {
                queryWrapper.orderByAsc(queryDTO.getSortField());
            } else {
                queryWrapper.orderByDesc(queryDTO.getSortField());
            }
        } else {
            // 默认按创建时间降序
            queryWrapper.orderByDesc("create_time");
        }

        return baseMapper.selectMapsPage(page, queryWrapper);
    }
}

4. 使用说明

API 请求示例

GET /inquiryOrder/code?page=1&size=10&sortField=create_time&ascending=false&keyword=TEST&status=PENDING

查询参数说明

  1. 分页参数

    • page: 当前页码(默认值:1)
    • size: 每页数量(默认值:5)
  2. 排序参数

    • sortField: 排序字段名
    • ascending: 排序方向(true: 升序,false: 降序)
  3. 过滤条件

    • keyword: 关键字搜索(支持模糊匹配)
    • status: 状态过滤
    • startTime: 开始时间
    • endTime: 结束时间

功能特点

  1. 灵活的排序

    • 支持任意字段排序
    • 可选择升序或降序
    • 默认按创建时间降序
  2. 多条件查询

    • 支持关键字模糊搜索
    • 支持状态筛选
    • 支持时间范围筛选
  3. 分页功能

    • 支持自定义页码和每页数量
    • 返回总记录数和分页信息

返回结果示例

{
    "code": 200,
    "message": "success",
    "data": {
        "records": [...],
        "total": 100,
        "size": 10,
        "current": 1,
        "pages": 10
    }
}

5. 注意事项

  1. 确保已配置 MyBatis-Plus 分页插件
  2. 注意字段名与数据库字段的对应关系
  3. 建议对敏感字段进行安全处理
  4. 考虑添加参数验证

http://www.kler.cn/a/576759.html

相关文章:

  • DeepSeek 医疗大模型微调实战讨论版(第一部分)
  • 数据结构--AVL树
  • hyperlane使用SSE实现服务端主动推送
  • git的坑
  • 【运维篇】KubeSphere-02(经验汇总)
  • 开启焊接设备安全管控新纪元
  • Flask项目框架
  • 手机屏幕摔不显示了,如何用其他屏幕临时显示,用来导出资料或者清理手机
  • Springboot 启动流程
  • uniapp+node+mysql接入deepseek实现流式输出
  • P8748 [蓝桥杯 2021 省 B] 时间显示
  • VS大型CPP项目调试,Debug模式,Release模式,附加到进程模式
  • app测试|面试常问工作常用的adb命令集
  • IBUF和BUFG
  • DeepSeek如何变现?完整版学习资料合集【可下载】
  • 【开题报告+论文+源码】基于SSM的宿舍管理系统的设计与实现
  • 2025网络安全工程师:软考新挑战与职业发展探析
  • python用户图形界面pygtk库安装与使用
  • 代码随想录 回溯
  • 高速率高耐压国产CAN FD芯片技术特性与应用前景