当前位置:网站首页>MP进阶操作: 时间操作, sql,querywapper,lambdaQueryWapper(条件构造器)快速筛选 枚举类

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

2022-07-04 22:35:00 pingzhuyan

目录

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);

原网站

版权声明
本文为[pingzhuyan]所创,转载请带上原文链接,感谢
https://blog.csdn.net/pingzhuyan/article/details/125557294