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

java问题总结

一、mybatis-plus实现时间范围查询

在实际开发中常常需要对数进行时间范围的查询,而大部分的时间范围的给定在同一系统的不同页面需求常常是一致的。比如在仓库列表中查询(当天产生的、一周内的、30天内的),销售的商品(当天产生的、一周内的、30天内的)。总之时间范围常常是不变的,所以封装一个方法是必要的。

✅具体实现的方法如下:
package com.sxty.platform.utils;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.sxty.platform.base.common.DateRange;
import org.apache.poi.ss.formula.functions.T;import java.util.Optional;import static cn.dev33.satoken.SaManager.log;public class QueryWrapperUtils {public static <T> LambdaQueryWrapper<T> buildDateRangeWrapper(String dateRange,SFunction<T, ?> timeColumn) {//定义两个时间用于分类处理DateTime beginOfDay;DateTime endOfDay;//通过fromValue查看枚举类中是否有dateRangeOptional<DateRange> range = DateRange.fromValue(dateRange);//枚举类中不存在,那么就直接返回一个空的if (!range.isPresent()) {log.warn("无法解析的 dateRange 值: {}", dateRange);return new LambdaQueryWrapper<>();}//分类处理赋值给两个日期switch (range.get()) {case TODAY:beginOfDay = DateUtil.beginOfDay(DateUtil.date());endOfDay = DateUtil.endOfDay(DateUtil.date());break;case YESTERDAY:beginOfDay = DateUtil.beginOfDay(DateUtil.yesterday());endOfDay = DateUtil.endOfDay(DateUtil.yesterday());break;case LAST_7_DAYS:beginOfDay = DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.date(), -6));endOfDay = DateUtil.endOfDay(DateUtil.date());break;case LAST_30_DAYS:beginOfDay = DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.date(), -29));endOfDay = DateUtil.endOfDay(DateUtil.date());break;default:log.warn("未处理的 dateRange 类型: {}", dateRange);return new LambdaQueryWrapper<>();}//返回对应的LambdaQueryWrapperreturn new LambdaQueryWrapper<T>().ge(timeColumn, beginOfDay).le(timeColumn, endOfDay);}
}
✅枚举类如下
package com.sxty.platform.base.common;import java.util.Arrays;
import java.util.Optional;public enum DateRange {TODAY("today"),YESTERDAY("yesterday"),LAST_7_DAYS("last7days"),LAST_30_DAYS("last30days");private final String value;DateRange(String value) {this.value = value;}public String getValue() {return value;}// 新增的方法:通过字符串查找枚举public static Optional<DateRange> fromValue(String value) {return Arrays.stream(values()).filter(dr -> dr.value.equalsIgnoreCase(value)).findFirst();}}
参数说明:
dateRange 日期范围,传递一个字符串,与定义好的Enum进行对比
SFunction<T, R>MyBatis-Plus 提供的一个 函数式接口,用于 Lambda 表达式安全地引用实体类的字段(属性),从而避免直接使用字符串字段名造成的代码不安全和维护困难。
❓SFuntion是干什么用的?

SFunction<T, R> 用于表示:
从 T 类型对象中提取一个字段 R”,例如:

User::getCreateTime

表示:从 User 实体中获取 createTime 字段。

✅在service方法调用
QueryWrapperUtils.buildDateRangeWrapper(pageUserReq.getDateRange(), User::getCreateTime);
http://www.xdnf.cn/news/5662.html

相关文章:

  • Java笔记4
  • Windows重置网络,刷新缓存
  • 实训九 软件包管理
  • Python笔记:windows下永久配置pip镜像源
  • QT5.14安装以及新建基础项目
  • XOCIETY 携手 adidas 推出限量版 NFT 皮肤系列
  • 网络基础1(应用层、传输层)
  • Android CountDownTimer重写
  • RDMA核心组件 的总结表格
  • RSA算法详解一:初识RSA
  • Python爬虫如何获取JavaScript动态渲染后的网页内容?
  • VUE3基础样式调整学习经验
  • yarn workspace使用指南
  • 配置集群(yarn)
  • 消息队列如何保证消息可靠性(kafka以及RabbitMQ)
  • MySQL全量、增量备份与恢复
  • Qt创建项目
  • 基于千眼狼高速摄像机与三色掩模的体三维粒子图像测速PIV技术
  • 前苹果首席设计官回顾了其在苹果的设计生涯、公司文化、标志性产品的背后故事
  • CentOS下安装MySQL数据库
  • node .js 启动基于express框架的后端服务报错解决
  • WEB安全--RCE--webshell bypass2
  • NestJS 知识框架
  • 区块链大纲笔记
  • 人脸识别deepface相关笔记
  • 物联网无线传感方向专业词汇解释
  • git|gitee仓库同步到github
  • JDK动态代理和CGLIB动态代理的区别?
  • 《Head First 设计模式》第一章 - 笔记
  • 关于nextjs中next-sitemap插件生成文件样式丢失问题及自定义样式处理