欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis Plus构造查询一周内、一月内、一年内的条件构造器

程序员文章站 2022-05-24 14:35:15
...

话不多说,直接上代码!

构造条件代码

private <T extends BaseEntity> LambdaQueryWrapper<T> buildQueryWrapper(NewBigDataBaseDTO dto){
        Integer timeType = dto.getTimeType();
        Date currentDate = new Date();
        LambdaQueryWrapper<T> lqw = Wrappers.lambdaQuery();
        lqw.eq(T::getHasDelete, 0);
        lqw.eq(T::getHasStatus, 0);
        lqw.ge(timeType == NewBigDataTimeTypeEnum.ONE_WEEK.getCode(), T::getAddTime, DateUtil.offsetWeek(currentDate, -1));
        lqw.ge(timeType == NewBigDataTimeTypeEnum.ONE_MONTH.getCode(), T::getAddTime, DateUtil.offsetMonth(currentDate, -1));
        lqw.ge(timeType == NewBigDataTimeTypeEnum.THREE_MONTH.getCode(), T::getAddTime, DateUtil.offsetMonth(currentDate, -3));
        lqw.ge(timeType == NewBigDataTimeTypeEnum.ONE_YEAR.getCode(), T::getAddTime, DateUtil.offsetMonth(currentDate, -12));
        lqw.ge(timeType == NewBigDataTimeTypeEnum.CUSTOMIZE.getCode(), T::getAddTime, dto.getStartTime());
        lqw.le(timeType == NewBigDataTimeTypeEnum.CUSTOMIZE.getCode(), T::getAddTime, dto.getEndTime());
        return lqw;
    }

其中使用到了HutoolDateUtil工具


不想用可以使用Java中的Calendar类,文末放了使用参考。

NewBigDataBaseDTO

@Data
public class NewBigDataBaseDTO {

        /**
     * 时间区间类别
     */
    @NotNull(message = "时间区间类别timeType不能为空")
    @VerifyEnum(enumClass = NewBigDataTimeTypeEnum.class, keyColumn = "code")
    private Integer timeType;

    /**
     * 选择自定义时必填:开始时间
     */
    @OtherAffect(column = "timeType", columnValue = "6", message = "timeType=6时, startTime必填")
    private Date startTime;

    /**
     * 选择自定义时必填:结束时间
     */
    @OtherAffect(column = "timeType", columnValue = "6", message = "timeType=6时, endTime必填")
    private Date endTime;

NewBigDataTimeTypeEnum枚举

public enum NewBigDataTimeTypeEnum {

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

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

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

    public int getCode() {
        return code;
    }

    public String getName() {
        return name;
    }
}

Calendar使用参考

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar c = Calendar.getInstance();
 
//过去七天
c.setTime(new Date());
c.add(Calendar.DATE, - 7);
Date d = c.getTime();
String day = format.format(d);
System.out.println("过去七天:"+day);
 
//过去一月
c.setTime(new Date());
c.add(Calendar.MONTH, -1);
Date m = c.getTime();
String mon = format.format(m);
System.out.println("过去一个月:"+mon);
 
//过去三个月
c.setTime(new Date());
c.add(Calendar.MONTH, -3);
Date m3 = c.getTime();
String mon3 = format.format(m3);
System.out.println("过去三个月:"+mon3);
 
//过去一年
c.setTime(new Date());
c.add(Calendar.YEAR, -1);
Date y = c.getTime();
String year = format.format(y);
System.out.println("过去一年:"+year);

可以自己封装一个工具类