zoukankan      html  css  js  c++  java
  • LambdaQueryWrapper 日期格式转换,匹配精确日期及为空日期

      /**
         * 日期过滤
         */
        private void dateFilter(String dateField, LambdaQueryWrapper<TmpOrderAuxiliaryPlanEntity> wrapper, String fieldName) {
            List<String> dateArray;
            String sqlDateField = DataConversionUtil.humpToUnderline(fieldName);
            dateArray = Arrays.stream(dateField.split(Constant.SEP)).collect(Collectors.toList());
            StringBuilder sql = new StringBuilder();
            for (int i = 0; i < dateArray.size(); i++) {
                sql.append(Constant.SINGLE_QUOTE).append(dateArray.get(i)).append(Constant.SINGLE_QUOTE).append(Constant.SEP);
            }
            String stringSql = sql.deleteCharAt(sql.length() - 1).toString();
            //查询日期满足条件且为空的值
            //wrapper.apply("DATE_FORMAT(" + sqlDateField + ",'%Y-%m-%d') in (" + stringSql + ") or " + sqlDateField + " is null");
            if (stringSql.contains(Constant.NULL)) {
                //wrapper.apply("" + sqlDateField + " is null");
                if (sqlDateField.equals(DataConversionUtil.humpToUnderline(Constant.PLANNED_DELIVERY_DATE))) {
                    wrapper.apply("DATE_FORMAT(" + sqlDateField + ",'%Y-%m-%d') in (" + stringSql + ")").or().isNull(TmpOrderAuxiliaryPlanEntity::getPlannedDeliveryDate);
                    //wrapper.apply("DATE_FORMAT(" + sqlDateField + ",'%Y-%m-%d') in (" + stringSql + ")");
                }
            } else {
                wrapper.apply("DATE_FORMAT(" + sqlDateField + ",'%Y-%m-%d') in (" + stringSql + ")");
            }
        }
    注意事项 : 
    查询为空不要这样写:
    wrapper.apply("DATE_FORMAT(" + sqlDateField + ",'%Y-%m-%d') in (" + stringSql + ") or " + sqlDateField + " is null"); 会影响其他wrapper拼接的sql
    正确写法:
    wrapper.apply("DATE_FORMAT("( + sqlDateField + ",'%Y-%m-%d') in (" + stringSql + ") or " + sqlDateField + " is null)"); 
    或:
    wrapper.apply("DATE_FORMAT(" + sqlDateField + ",'%Y-%m-%d') in (" + stringSql + ")").or().isNull(TmpOrderAuxiliaryPlanEntity::getPlannedDeliveryDate);
    

     说明:

    wrapper.apply():sql自由拼接方法 可能会有sql注入风险  也可用于MySql  可用于.last()方法之前
    LambdaQueryWrapper:可以直接从实体中获取值,避免硬编码
    DATE_FORMAT() sql函数 用于日期格式转换
    Constant.SEP == “,”  (逗号)
    Constant.SINGLE_QUOTE == “'” (单引号)、
    DataConversionUtil.humpToUnderline() :驼峰转下划线方法
  • 相关阅读:
    Redis系列-存储篇sorted set主要操作命令
    Redis系列-存储篇string主要操作命令
    Redis系列-存储篇list主要操作命令
    Redis系列-存储hash主要操作命令
    Jenkins-k8s-helm-eureka-harbor-githab-mysql-nfs微服务发布平台实战
    JAVA线上故障排查手册-(推荐)
    全网最详细的Linux命令系列-sed文本处理命令
    Shell水平测试-想学习Shell的童鞋必选必看文章
    区块链:新经济蓝图及导读
    希望下次 别人问我抽象 ,继承 ,密封 的时候 我不是背书 而是 在讲实实在在的实现
  • 原文地址:https://www.cnblogs.com/axibug/p/15665671.html
Copyright © 2011-2022 走看看