From 07beec403959ce5bf2fd1fee9431e9221721deea Mon Sep 17 00:00:00 2001 From: ArgonarioD Date: Thu, 30 Jun 2022 14:26:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86WrapperUtils?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/ProjectServiceImpl.java | 9 +-- .../projectmanagement/utils/WrapperUtils.java | 71 +++++++++++++++++++ 2 files changed, 76 insertions(+), 4 deletions(-) create mode 100644 src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/WrapperUtils.java diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectServiceImpl.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectServiceImpl.java index a31a34c..eff289f 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectServiceImpl.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectServiceImpl.java @@ -30,11 +30,12 @@ public class ProjectServiceImpl extends ServiceImpl impl Integer staffId = TokenUtils.getStaffId(token); return baseMapper.findMyProject(new Page<>(pageCurrent, pageSize), staffId, + //TODO: 应该要改成调用WrapperUtils.allEqAndTimeIntervalQueryWrapper方法 Wrappers.query() - .allEq(WrapperUtils.getWrappedMapWithoutTime(params)) - //.lambda() - //.between(params.get("projectStartTimeStart")!=null,Project::getProjectStartTime,) - ); + .allEq(WrapperUtils.getMapWithoutTime(params)) + //.lambda() + //.between(params.get("projectStartTimeStart")!=null,Project::getProjectStartTime,) + ); } @Override diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/WrapperUtils.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/WrapperUtils.java new file mode 100644 index 0000000..8446afd --- /dev/null +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/WrapperUtils.java @@ -0,0 +1,71 @@ +package cn.edu.hfut.rmdjzz.projectmanagement.utils; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.HashMap; +import java.util.Map; + +/** + * @author 佘语殊 + * @since 2022/6/30 11:50 + */ +public class WrapperUtils { + + /** + * 用提供的paramMap构造一个QueryWrapper + *

+ * - 一般的参数会与直接使用{@link QueryWrapper#allEq(Map, boolean)}相同 + *

+ * - 对于时间类({@link LocalDateTime}或{@link LocalDate}或{@link LocalTime}), + * 会按照key的后缀处理,若为Start则处理为column >= key,End则处理为column <= key + * + * @param null2IsNull 若为真,将value为null的值在SQL中生成为IS NULL;否则值为null的参数不会在SQL中生成 + */ + public static QueryWrapper allEqAndTimeIntervalQueryWrapper(Map paramMap, boolean null2IsNull) { + QueryWrapper wrapper = new QueryWrapper<>(); + paramMap.forEach((key, value) -> { + if (value == null) { + if (null2IsNull) { + wrapper.isNull(key); + } + return; + } + if (isTimeClass(value.getClass())) { + if (key.endsWith("Start")) { + wrapper.ge(key.substring(0, key.length() - 5), value); + } else if (key.endsWith("End")) { + wrapper.ge(key.substring(key.length() - 3), value); + } + return; + } + wrapper.eq(key, value); + }); + return wrapper; + } + + /** + * 从参数map中获取去掉了value为时间类的entry的map + *

+ * **若无特殊需求请使用{@link WrapperUtils#allEqAndTimeIntervalQueryWrapper(Map, boolean)}**直接获取wrapper + */ + @Deprecated + public static Map getMapWithoutTime(Map map) { + Map result = new HashMap<>(); + map.forEach((key, value) -> { + if (!isTimeClass(value.getClass())) { + result.put(key, value); + } + }); + return result; + } + + /** + * 判断参数class是否为时间类({@link LocalDateTime}或{@link LocalDate}或{@link LocalTime}) + */ + public static boolean isTimeClass(Class clazz) { + return LocalDateTime.class.equals(clazz) || LocalDate.class.equals(clazz) || LocalTime.class.equals(clazz); + } +}