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

分页查询:时间筛选+日期筛选+增加queryWrapper 筛选条件

文章结构建议:

1. 引言

  • 介绍实际业务场景:银行诉讼提醒系统
  • 需要实现的功能:分页查询 + 复杂条件过滤

2. 核心代码分析

2.1 Controller层 - REST API入口
@GetMapping("/page")
@Operation(summary = "获得诉讼提醒分页")
@PreAuthorize("@ss.hasPermission('bank:remind-lawsuit:query')")
public CommonResult<PageResult<RemindLawsuitRespVO>> getRemindLawsuitPage(@Valid RemindLawsuitPageReqVO pageReqVO) {PageResult<RemindLawsuitRespVO> pageResult = remindLawsuitService.getRemindLawsuitPage(pageReqVO);return success(pageResult);
}

关键点分析:

  • 使用Swagger注解@Operation进行API文档说明
  • 权限控制@PreAuthorize确保安全访问
  • 参数校验@Valid保证数据完整性
  • 接收请求参数 pageReqVO

  • 调用 Service,返回分页数据。

  • CommonResult 包装统一响应。

2.2 Service层 - 业务逻辑处理
@Override
public PageResult<RemindLawsuitRespVO> getRemindLawsuitPage(RemindLawsuitPageReqVO pageReqVO) {LambdaQueryWrapperX<RemindLawsuitDO> queryWrapper = new LambdaQueryWrapperX<RemindLawsuitDO>().eqIfPresent(RemindLawsuitDO::getCustCode, pageReqVO.getCustCode()).likeIfPresent(RemindLawsuitDO::getCustName, pageReqVO.getCustName()).likeIfPresent(RemindLawsuitDO::getDeptName, pageReqVO.getDeptName()).eqIfPresent(RemindLawsuitDO::getCustType, pageReqVO.getCustType()).betweenIfPresent(RemindLawsuitDO::getRemindTime, pageReqVO.getRemindTime());addOverdueTimeCondition(queryWrapper, pageReqVO);IPage<RemindLawsuitRespVO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());page = remindLawsuitMapper.getRemindLawsuitPage(page, queryWrapper);return new PageResult<>(page.getRecords(), page.getTotal());
}

技术亮点:

  • 使用LambdaQueryWrapperX链式调用,代码简洁易读
  • eqIfPresentlikeIfPresent等方法避免空值判断
  • 将复杂条件封装到独立方法中,提高代码可维护性
  • LambdaQueryWrapperX 用来拼接动态条件(只有参数不为空才生效)。

  • addOverdueTimeCondition 封装了“逾期 1-30 天 / 31-90 天 / 90 天以上”的条件。

  • 最终调用 remindLawsuitMapper.getRemindLawsuitPage 执行分页。

2.3 复杂条件处理 - 逾期时间分段查询
private void addOverdueTimeCondition(LambdaQueryWrapperX<RemindLawsuitDO> queryWrapper, RemindLawsuitPageReqVO pageReqVO) {if (pageReqVO.getKey() != null && pageReqVO.getKey() > 0) {if (1 == pageReqVO.getKey()) {// 1-30天逾期LocalDateTime[] timeRange = get1_30();queryWrapper.between(RemindLawsuitDO::getExpireTime, timeRange[0], timeRange[1]);} else if (31 == pageReqVO.getKey()) {// 31-90天逾期LocalDateTime[] timeRange = get31_90();queryWrapper.between(RemindLawsuitDO::getExpireTime, timeRange[0], timeRange[1]);} else if (90 == pageReqVO.getKey()) {// 90天以上逾期queryWrapper.lt(RemindLawsuitDO::getExpireTime, get90_());}}
}
2.4 Mapper层 - XML配置
IPage<RemindLawsuitRespVO> getRemindLawsuitPage(IPage<RemindLawsuitRespVO> page, 
@Param("ew") LambdaQueryWrapper<RemindLawsuitDO> queryWrapper);
<select id="getRemindLawsuitPage"resultType="com....controller.admin.remindlawsuit.vo.RemindLawsuitRespVO">selectm.*from ux_remind_lawsuit mWHERE 1 = 1<if test="ew != null"><if test="ew.sqlSegment != null"><if test="ew.sqlSegment != ''">AND ${ew.sqlSegment}</if></if></if>and m.deleted = 0ORDER BY m.remind_time ASC, m.id DESC
</select>

3. 技术要点总结

3.1 设计模式应用
  • Builder模式:LambdaQueryWrapperX的链式调用
  • 策略模式:不同逾期时间段的查询策略
3.2 最佳实践
  • 条件查询使用xxxIfPresent避免空值处理
  • 分页查询与业务逻辑分离
  • 复杂条件封装提高代码可读性
3.3 性能优化考虑
  • 数据库索引优化(remind_time, expire_time等字段)
  • 软删除机制(deleted = 0)

4. 扩展思考

  • 如何处理更复杂的动态查询条件
  • 分页查询的缓存策略
  • 大数据量下的分页性能优化

5. 总结

这套代码体现了企业级应用开发中的常见模式,具有很好的参考价值。


文章转载自:

http://8yoTTkqP.ywndg.cn
http://piD5CKTe.ywndg.cn
http://o6dm6kck.ywndg.cn
http://ILS9Huox.ywndg.cn
http://6gd5OQjF.ywndg.cn
http://xIbWFe34.ywndg.cn
http://U5F6Erv2.ywndg.cn
http://I4GSpWZc.ywndg.cn
http://UhpzMFVF.ywndg.cn
http://o4nUbzd8.ywndg.cn
http://WXTg8NAC.ywndg.cn
http://s83OJgFe.ywndg.cn
http://z6fM6Upa.ywndg.cn
http://u7xGUeo0.ywndg.cn
http://9xQpBpaY.ywndg.cn
http://VSyyB4yU.ywndg.cn
http://UBaGFr8F.ywndg.cn
http://Ot5llcrE.ywndg.cn
http://6zNuNemn.ywndg.cn
http://jQ2Ic522.ywndg.cn
http://335V2Vau.ywndg.cn
http://wKwfaXbB.ywndg.cn
http://ZEsNAxTO.ywndg.cn
http://YFXJzzwg.ywndg.cn
http://8icFWtC8.ywndg.cn
http://mNdRFJ2k.ywndg.cn
http://uXMFim0o.ywndg.cn
http://hd4qFGiy.ywndg.cn
http://OYg7DSX9.ywndg.cn
http://Bji41nKo.ywndg.cn
http://www.dtcms.com/a/386259.html

相关文章:

  • 通透理清三级缓存--看Spring是如何解决循环依赖的
  • 【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
  • 查看 Docker 守护进程日志
  • 第11章 [特殊字符]️Hutool 常用工具类
  • 【MySQL|第十篇】总结篇——各种命令集合
  • npm : 无法加载文件 d:\nvm4w\nodejs\npm.ps1,
  • 贪心算法应用:活动选择问题详解
  • C++ 模板:以简御繁-5/5
  • AI大模型学习(6)Yolo V8神经网络的基础应用
  • 【完整源码+数据集+部署教程】残疾人和正常人识别图像分割系统: yolov8-seg-act
  • 深度学习:从概念到实践,开启智能时代新篇章
  • 构建AI智能体:三十五、决策树的核心机制(一):刨根问底鸢尾花分类中的参数推理计算
  • 美创科技入选 2025 年度省级场景型数字化服务商!
  • 《COD21》新赛季海量更新:《忍者神龟》联动上线!
  • RuoYi框架Excel静态模板下载例子Demo
  • 【系列文章】Linux系统中断的应用02-中断下文 tasklet
  • GPT-5-Codex 模型评测报告
  • MAZANOKE+cpolar让照片存储无上限
  • (笔记)Linux系统设置虚拟内存
  • Kotlin-基础语法练习三
  • windows上Redis Desktop Manager链接服务器docker内Redis方法
  • jMeter小记-数组数据X_id集合获取及循环控制器使用调用数组数据X_id
  • 迁移指南:从旧版 Electron 升级
  • Node.js中的 http 模块详解
  • 设置powershell每次打开自动启动anaconda中自设环境
  • keil5和arm编译器安装
  • 【初阶数据结构】顺序表
  • 外媒称Switch2手柄鼠标功能 将彻底改变玩游戏的方式
  • 【Spring Cloud】微服务
  • 设计模式(Java实现)----建造者模式