MP进阶操作: 时间操作, sql,querywapper,lambdaQueryWapper(条件构造器)快速筛选 枚举类

目录

1. 时间筛选的原方法: 

 2. sql语句 :TIMESTAMPDIFF()的 方法 使用 

查询当前时间的30分钟之前(过期30分钟)和60分钟后(快到期60分钟)

3.  整合条件构造器(时间)

3.1 写一个枚举类(时间)

3.2 写一个类 需要这三个属性

3.3 条件构造器写法

3.4  代码中使用方式


1. 时间筛选的原方法: 

获取 开始时间-> 结束时间 

一个月, 一年 都需要计算

queryWapper.ge(timeStatus, "update_date", appointEntity.getStartTime())//大于开始时间
                .le(timeStatus, "update_date", appointEntity.getEndTime())//小于等于结束时间

 2. sql语句 :TIMESTAMPDIFF()的 方法 使用 

查询当前时间的30分钟之前(过期30分钟)和60分钟后(快到期60分钟)

select id from 表 
           where (TIMESTAMPDIFF(MINUTE, #{nowTime}, ap_time) >0 and  TIMESTAMPDIFF(MINUTE, #{nowTime}, ap_time) <= 60 )
          or 
           (TIMESTAMPDIFF(MINUTE, ap_time, #{nowTime})>0 and TIMESTAMPDIFF(MINUTE, ap_time, #{nowTime}) <30) 

3.  整合条件构造器(时间)

3.1 写一个枚举类(时间)

package com.aisce.common.enums;

public enum DataTimeTypeEnum {

    /**
     * 近一周
     */
    ONE_WEEK(1, "近一周"),
    /**
     * 近一个月
     */
    ONE_MONTH(2, "近一个月"),
    /**
     * 近三个月
     */
    THREE_MONTH(3, "近三个月"),
    /**
     * 近一年
     */
    ONE_YEAR(4, "近一年"),
    /**
     * 所有
     */
    ALL(5, "所有"),
    /**
     * 自定义
     */
    CUSTOMIZE(6, "自定义")
    ;
    private final int code;
    private final String name;

    DataTimeTypeEnum(int code, String info) {
        this.code = code;
        this.name = info;
    }

    public static String getValue(int code) {
        DataTimeTypeEnum[] enums = values();
        for (DataTimeTypeEnum item : enums) {
            if (item.code == code) {
                return item.getName();
            }
        }
        return null;
    }

    public int getCode() {
        return code;
    }

    public String getName() {
        return name;
    }
}

3.2 写一个类 需要这三个属性

   /**
     * 时间类型
     */
    @TableField(exist = false )
    private Integer TimeType ;
    /**
     * 开始时间
     */
    @TableField(exist = false )
    private Date startTime;

    /**
     * 结束时间
     */
    @TableField(exist = false )
    private Date endTime;

3.3 条件构造器写法

/**
     * lambdaQuery 终极写法 时间规划
     * @param dto
     * @param <T>
     * @return
     */
    private <T extends AixiBillRecord> LambdaQueryWrapper<T> buildQueryWrapper(DataBaseDTO dto){
        Integer timeType = dto.getTimeType();
//        Integer timeType = 3;
        Date currentDate = new Date();
        LambdaQueryWrapper<T> lqw = Wrappers.lambdaQuery();
        lqw.ge(timeType == DataTimeTypeEnum.ONE_WEEK.getCode(), T::getCreateTime, DateUtil.offsetWeek(currentDate, -1));
        lqw.ge(timeType == DataTimeTypeEnum.ONE_MONTH.getCode(), T::getCreateTime, DateUtil.offsetMonth(currentDate, -1));
        lqw.ge(timeType == DataTimeTypeEnum.THREE_MONTH.getCode(), T::getCreateTime, DateUtil.offsetMonth(currentDate, -3));
        lqw.ge(timeType == DataTimeTypeEnum.ONE_YEAR.getCode(), T::getCreateTime, DateUtil.offsetMonth(currentDate, -12));
        lqw.ge(timeType == DataTimeTypeEnum.CUSTOMIZE.getCode(), T::getCreateTime, dto.getStartTime());
        lqw.le(timeType == DataTimeTypeEnum.CUSTOMIZE.getCode(), T::getCreateTime, dto.getEndTime());
        return lqw;
    }

3.4  代码中使用方式

(可能有更好的使用方式 寻找中)

DataBaseDTO dto = new DataBaseDTO();
dto.setTimeType(1);
        
LambdaQueryWrapper<*> LambdaQueryWrapper = buildQueryWrapper(dto);
LambdaQueryWrapper.eq(*::getCompanyId,user.getCompanyId());
   
//先获取全部数据
List<*> RecordList = baseMapper.selectList(LambdaQueryWrapper);

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pingzhuyan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值