Parcourir la source

修改mybatis的jar包

hmy il y a 2 mois
Parent
commit
00e8227345
53 fichiers modifiés avec 382 ajouts et 481 suppressions
  1. 2 2
      pom.xml
  2. 0 40
      src/main/java/cn/flowbb/framework/mybatis/common/exception/enums/GlobalErrorCodeConstants.java
  3. 0 125
      src/main/java/cn/flowbb/framework/mybatis/common/exception/util/ServiceExceptionUtil.java
  4. 0 141
      src/main/java/cn/flowbb/framework/mybatis/core/query/LambdaQueryWrapperX.java
  5. 0 40
      src/main/java/cn/flowbb/framework/mybatis/datasource/config/YudaoDataSourceAutoConfiguration.java
  6. 0 38
      src/main/java/cn/flowbb/framework/mybatis/datasource/core/filter/DruidAdRemoveFilter.java
  7. 3 3
      src/main/java/cn/flowbb/framework/mybatis/common/exception/ErrorCode.java
  8. 2 2
      src/main/java/cn/flowbb/framework/mybatis/common/exception/ServerException.java
  9. 2 2
      src/main/java/cn/flowbb/framework/mybatis/common/exception/ServiceException.java
  10. 39 0
      src/main/java/mybatisex/common/exception/enums/GlobalErrorCodeConstants.java
  11. 1 2
      src/main/java/cn/flowbb/framework/mybatis/common/exception/enums/ServiceErrorCodeRange.java
  12. 123 0
      src/main/java/mybatisex/common/exception/util/ServiceExceptionUtil.java
  13. 4 4
      src/main/java/cn/flowbb/framework/mybatis/common/pojo/CommonResult.java
  14. 1 1
      src/main/java/cn/flowbb/framework/mybatis/common/pojo/PageParam.java
  15. 1 1
      src/main/java/cn/flowbb/framework/mybatis/common/pojo/PageResult.java
  16. 1 1
      src/main/java/cn/flowbb/framework/mybatis/common/pojo/SortablePageParam.java
  17. 1 1
      src/main/java/cn/flowbb/framework/mybatis/common/pojo/SortingField.java
  18. 5 5
      src/main/java/cn/flowbb/framework/mybatis/config/IdTypeEnvironmentPostProcessor.java
  19. 3 5
      src/main/java/cn/flowbb/framework/mybatis/config/YudaoMybatisAutoConfiguration.java
  20. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/collection/ArrayIter.java
  21. 2 2
      src/main/java/cn/flowbb/framework/mybatis/core/dataobject/BaseDO.java
  22. 2 2
      src/main/java/cn/flowbb/framework/mybatis/core/enums/SqlConstants.java
  23. 2 2
      src/main/java/cn/flowbb/framework/mybatis/core/handler/DefaultDBFieldHandler.java
  24. 5 12
      src/main/java/cn/flowbb/framework/mybatis/core/mapper/BaseMapperX.java
  25. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/mapper/LambdaColumnWrapper.java
  26. 6 6
      src/main/java/cn/flowbb/framework/mybatis/core/mapper/PlusBaseMapperX.java
  27. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/mapper/QueryEntity.java
  28. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/mapper/QueryKeyword.java
  29. 2 2
      src/main/java/cn/flowbb/framework/mybatis/core/mapper/QueryLambdaUtil.java
  30. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/mapper/QueryMap.java
  31. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/mapper/QueryWapper.java
  32. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/mapper/QueryWrapperUtil.java
  33. 138 0
      src/main/java/mybatisex/core/query/LambdaQueryWrapperX.java
  34. 3 3
      src/main/java/cn/flowbb/framework/mybatis/core/query/MPJLambdaWrapperX.java
  35. 2 2
      src/main/java/cn/flowbb/framework/mybatis/core/query/QueryWrapperX.java
  36. 2 7
      src/main/java/cn/flowbb/framework/mybatis/core/service/AbstractService.java
  37. 3 3
      src/main/java/cn/flowbb/framework/mybatis/core/service/impl/AbstractServiceImpl.java
  38. 2 2
      src/main/java/cn/flowbb/framework/mybatis/core/type/EncryptTypeHandler.java
  39. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/type/IntegerListTypeHandler.java
  40. 2 2
      src/main/java/cn/flowbb/framework/mybatis/core/type/LongListTypeHandler.java
  41. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/type/StringListTypeHandler.java
  42. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/util/ArrayUtils.java
  43. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/util/CollUtil.java
  44. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/util/CollectionHandlerUtils.java
  45. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/util/DbX.java
  46. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/util/IterUtil.java
  47. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/util/JdbcUtils.java
  48. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/util/MapUtils.java
  49. 3 3
      src/main/java/cn/flowbb/framework/mybatis/core/util/MyBatisUtils.java
  50. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/util/ObjectUtil.java
  51. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/util/SetUtils.java
  52. 1 1
      src/main/java/cn/flowbb/framework/mybatis/core/util/StrUtils.java
  53. 1 1
      src/main/java/cn/flowbb/framework/mybatis/datasource/core/enums/DataSourceEnum.java

+ 2 - 2
pom.xml

@@ -7,10 +7,10 @@
 
 	<groupId>cn.flowbb.boot</groupId>
 	<artifactId>spring-boot-starter-mybatis</artifactId>
-	<version>0.0.8-SNAPSHOT</version>
+	<version>0.0.9-SNAPSHOT</version>
 	<packaging>jar</packaging>
 
-	<name>spring-boot-starter-mybatis</name>
+	<name>spring-boot-starter-mybatis-ex</name>
 	<url>http://maven.apache.org</url>
 
 	<properties>

+ 0 - 40
src/main/java/cn/flowbb/framework/mybatis/common/exception/enums/GlobalErrorCodeConstants.java

@@ -1,40 +0,0 @@
-package cn.flowbb.framework.mybatis.common.exception.enums;
-
-import cn.flowbb.framework.mybatis.common.exception.ErrorCode;
-
-/**
- * 全局错误码枚举
- * 0-999 系统异常编码保留
- *
- * 一般情况下,使用 HTTP 响应状态码 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
- * 虽然说,HTTP 响应状态码作为业务使用表达能力偏弱,但是使用在系统层面还是非常不错的
- * 比较特殊的是,因为之前一直使用 0 作为成功,就不使用 200 啦。
- *
- * @author 芋道源码
- */
-public interface GlobalErrorCodeConstants {
-
-    ErrorCode SUCCESS = new ErrorCode(0, "成功");
-
-    // ========== 客户端错误段 ==========
-
-    ErrorCode BAD_REQUEST = new ErrorCode(400, "请求参数不正确");
-    ErrorCode UNAUTHORIZED = new ErrorCode(401, "账号未登录");
-    ErrorCode FORBIDDEN = new ErrorCode(403, "没有该操作权限");
-    ErrorCode NOT_FOUND = new ErrorCode(404, "请求未找到");
-    ErrorCode METHOD_NOT_ALLOWED = new ErrorCode(405, "请求方法不正确");
-    ErrorCode LOCKED = new ErrorCode(423, "请求失败,请稍后重试"); // 并发请求,不允许
-    ErrorCode TOO_MANY_REQUESTS = new ErrorCode(429, "请求过于频繁,请稍后重试");
-
-    // ========== 服务端错误段 ==========
-
-    ErrorCode INTERNAL_SERVER_ERROR = new ErrorCode(500, "系统异常");
-    ErrorCode NOT_IMPLEMENTED = new ErrorCode(501, "功能未实现/未开启");
-
-    // ========== 自定义错误段 ==========
-    ErrorCode REPEATED_REQUESTS = new ErrorCode(900, "重复请求,请稍后重试"); // 重复请求
-    ErrorCode DEMO_DENY = new ErrorCode(901, "演示模式,禁止写操作");
-
-    ErrorCode UNKNOWN = new ErrorCode(999, "未知错误");
-
-}

+ 0 - 125
src/main/java/cn/flowbb/framework/mybatis/common/exception/util/ServiceExceptionUtil.java

@@ -1,125 +0,0 @@
-package cn.flowbb.framework.mybatis.common.exception.util;
-
-import cn.flowbb.framework.mybatis.common.exception.ErrorCode;
-import cn.flowbb.framework.mybatis.common.exception.ServiceException;
-import cn.flowbb.framework.mybatis.common.exception.enums.GlobalErrorCodeConstants;
-
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * {@link ServiceException} 工具类
- *
- * 目的在于,格式化异常信息提示。
- * 考虑到 String.format 在参数不正确时会报错,因此使用 {} 作为占位符,并使用 {@link #doFormat(int, String, Object...)} 方法来格式化
- *
- * 因为 {@link #MESSAGES} 里面默认是没有异常信息提示的模板的,所以需要使用方自己初始化进去。目前想到的有几种方式:
- *
- * 1. 异常提示信息,写在枚举类中,例如说,cn.iocoder.oceans.user.api.constants.ErrorCodeEnum 类 + ServiceExceptionConfiguration
- * 2. 异常提示信息,写在 .properties 等等配置文件
- * 3. 异常提示信息,写在 Apollo 等等配置中心中,从而实现可动态刷新
- * 4. 异常提示信息,存储在 db 等等数据库中,从而实现可动态刷新
- */
-
-public class ServiceExceptionUtil {
-	 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ServiceExceptionUtil.class);
-    /**
-     * 错误码提示模板
-     */
-    private static final ConcurrentMap<Integer, String> MESSAGES = new ConcurrentHashMap<>();
-
-    public static void putAll(Map<Integer, String> messages) {
-        ServiceExceptionUtil.MESSAGES.putAll(messages);
-    }
-
-    public static void put(Integer code, String message) {
-        ServiceExceptionUtil.MESSAGES.put(code, message);
-    }
-
-    public static void delete(Integer code, String message) {
-        ServiceExceptionUtil.MESSAGES.remove(code, message);
-    }
-
-    // ========== 和 ServiceException 的集成 ==========
-
-    public static ServiceException exception(ErrorCode errorCode) {
-        String messagePattern = MESSAGES.getOrDefault(errorCode.getCode(), errorCode.getMsg());
-        return exception0(errorCode.getCode(), messagePattern);
-    }
-
-    public static ServiceException exception(ErrorCode errorCode, Object... params) {
-        String messagePattern = MESSAGES.getOrDefault(errorCode.getCode(), errorCode.getMsg());
-        return exception0(errorCode.getCode(), messagePattern, params);
-    }
-
-    /**
-     * 创建指定编号的 ServiceException 的异常
-     *
-     * @param code 编号
-     * @return 异常
-     */
-    public static ServiceException exception(Integer code) {
-        return exception0(code, MESSAGES.get(code));
-    }
-
-    /**
-     * 创建指定编号的 ServiceException 的异常
-     *
-     * @param code 编号
-     * @param params 消息提示的占位符对应的参数
-     * @return 异常
-     */
-    public static ServiceException exception(Integer code, Object... params) {
-        return exception0(code, MESSAGES.get(code), params);
-    }
-
-    public static ServiceException exception0(Integer code, String messagePattern, Object... params) {
-        String message = doFormat(code, messagePattern, params);
-        return new ServiceException(code, message);
-    }
-
-    public static ServiceException invalidParamException(String messagePattern, Object... params) {
-        return exception0(GlobalErrorCodeConstants.BAD_REQUEST.getCode(), messagePattern, params);
-    }
-
-    // ========== 格式化方法 ==========
-
-    /**
-     * 将错误编号对应的消息使用 params 进行格式化。
-     *
-     * @param code           错误编号
-     * @param messagePattern 消息模版
-     * @param params         参数
-     * @return 格式化后的提示
-     */
-    public static String doFormat(int code, String messagePattern, Object... params) {
-        StringBuilder sbuf = new StringBuilder(messagePattern.length() + 50);
-        int i = 0;
-        int j;
-        int l;
-        for (l = 0; l < params.length; l++) {
-            j = messagePattern.indexOf("{}", i);
-            if (j == -1) {
-                log.error("[doFormat][参数过多:错误码({})|错误内容({})|参数({})", code, messagePattern, params);
-                if (i == 0) {
-                    return messagePattern;
-                } else {
-                    sbuf.append(messagePattern.substring(i));
-                    return sbuf.toString();
-                }
-            } else {
-                sbuf.append(messagePattern, i, j);
-                sbuf.append(params[l]);
-                i = j + 2;
-            }
-        }
-        if (messagePattern.indexOf("{}", i) != -1) {
-            log.error("[doFormat][参数过少:错误码({})|错误内容({})|参数({})", code, messagePattern, params);
-        }
-        sbuf.append(messagePattern.substring(i));
-        return sbuf.toString();
-    }
-
-}

+ 0 - 141
src/main/java/cn/flowbb/framework/mybatis/core/query/LambdaQueryWrapperX.java

@@ -1,141 +0,0 @@
-package cn.flowbb.framework.mybatis.core.query;
-
-
-
-
-import java.util.Collection;
-
-import org.springframework.util.StringUtils;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
-
-import cn.flowbb.framework.mybatis.core.util.ArrayUtils;
-import cn.flowbb.framework.mybatis.core.util.ObjectUtil;
-
-/**
- * 拓展 MyBatis Plus QueryWrapper 类,主要增加如下功能:
- * <p>
- * 1. 拼接条件的方法,增加 xxxIfPresent 方法,用于判断值不存在的时候,不要拼接到条件中。
- *
- * @param <T> 数据类型
- */
-public class LambdaQueryWrapperX<T> extends LambdaQueryWrapper<T> {
-
-    private static final long serialVersionUID = -8898497335185097393L;
-
-	public LambdaQueryWrapperX<T> likeIfPresent(SFunction<T, ?> column, String val) {
-        if (StringUtils.hasText(val)) {
-            return (LambdaQueryWrapperX<T>) super.like(column, val);
-        }
-        return this;
-    }
-
-    public LambdaQueryWrapperX<T> inIfPresent(SFunction<T, ?> column, Collection<?> values) {
-        if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtils.isEmpty(values)) {
-            return (LambdaQueryWrapperX<T>) super.in(column, values);
-        }
-        return this;
-    }
-
-    public LambdaQueryWrapperX<T> inIfPresent(SFunction<T, ?> column, Object... values) {
-        if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtils.isEmpty(values)) {
-            return (LambdaQueryWrapperX<T>) super.in(column, values);
-        }
-        return this;
-    }
-
-    public LambdaQueryWrapperX<T> eqIfPresent(SFunction<T, ?> column, Object val) {
-        if (ObjectUtil.isNotEmpty(val)) {
-            return (LambdaQueryWrapperX<T>) super.eq(column, val);
-        }
-        return this;
-    }
-
-    public LambdaQueryWrapperX<T> neIfPresent(SFunction<T, ?> column, Object val) {
-        if (ObjectUtil.isNotEmpty(val)) {
-            return (LambdaQueryWrapperX<T>) super.ne(column, val);
-        }
-        return this;
-    }
-
-    public LambdaQueryWrapperX<T> gtIfPresent(SFunction<T, ?> column, Object val) {
-        if (val != null) {
-            return (LambdaQueryWrapperX<T>) super.gt(column, val);
-        }
-        return this;
-    }
-
-    public LambdaQueryWrapperX<T> geIfPresent(SFunction<T, ?> column, Object val) {
-        if (val != null) {
-            return (LambdaQueryWrapperX<T>) super.ge(column, val);
-        }
-        return this;
-    }
-
-    public LambdaQueryWrapperX<T> ltIfPresent(SFunction<T, ?> column, Object val) {
-        if (val != null) {
-            return (LambdaQueryWrapperX<T>) super.lt(column, val);
-        }
-        return this;
-    }
-
-    public LambdaQueryWrapperX<T> leIfPresent(SFunction<T, ?> column, Object val) {
-        if (val != null) {
-            return (LambdaQueryWrapperX<T>) super.le(column, val);
-        }
-        return this;
-    }
-
-    public LambdaQueryWrapperX<T> betweenIfPresent(SFunction<T, ?> column, Object val1, Object val2) {
-        if (val1 != null && val2 != null) {
-            return (LambdaQueryWrapperX<T>) super.between(column, val1, val2);
-        }
-        if (val1 != null) {
-            return (LambdaQueryWrapperX<T>) ge(column, val1);
-        }
-        if (val2 != null) {
-            return (LambdaQueryWrapperX<T>) le(column, val2);
-        }
-        return this;
-    }
-
-    public LambdaQueryWrapperX<T> betweenIfPresent(SFunction<T, ?> column, Object[] values) {
-        Object val1 = ArrayUtils.get(values, 0);
-        Object val2 = ArrayUtils.get(values, 1);
-        return betweenIfPresent(column, val1, val2);
-    }
-
-    // ========== 重写父类方法,方便链式调用 ==========
-
-    @Override
-    public LambdaQueryWrapperX<T> eq(boolean condition, SFunction<T, ?> column, Object val) {
-        super.eq(condition, column, val);
-        return this;
-    }
-
-    @Override
-    public LambdaQueryWrapperX<T> eq(SFunction<T, ?> column, Object val) {
-        super.eq(column, val);
-        return this;
-    }
-
-    @Override
-    public LambdaQueryWrapperX<T> orderByDesc(SFunction<T, ?> column) {
-        super.orderByDesc(true, column);
-        return this;
-    }
-
-    @Override
-    public LambdaQueryWrapperX<T> last(String lastSql) {
-        super.last(lastSql);
-        return this;
-    }
-
-    @Override
-    public LambdaQueryWrapperX<T> in(SFunction<T, ?> column, Collection<?> coll) {
-        super.in(column, coll);
-        return this;
-    }
-
-}

+ 0 - 40
src/main/java/cn/flowbb/framework/mybatis/datasource/config/YudaoDataSourceAutoConfiguration.java

@@ -1,40 +0,0 @@
-//package cn.flowbb.rk.framework.datasource.config;
-//
-//import cn.flowbb.rk.framework.datasource.core.filter.DruidAdRemoveFilter;
-//import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
-//import org.springframework.boot.autoconfigure.AutoConfiguration;
-//import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-//import org.springframework.boot.context.properties.EnableConfigurationProperties;
-//import org.springframework.boot.web.servlet.FilterRegistrationBean;
-//import org.springframework.context.annotation.Bean;
-//import org.springframework.transaction.annotation.EnableTransactionManagement;
-//
-///**
-// * 数据库配置类
-// *
-// * @author 芋道源码
-// */
-////@AutoConfiguration
-////@EnableTransactionManagement(proxyTargetClass = true) // 启动事务管理
-////@EnableConfigurationProperties(DruidStatProperties.class)
-//public class YudaoDataSourceAutoConfiguration {
-//
-//    /**
-//     * 创建 DruidAdRemoveFilter 过滤器,过滤 common.js 的广告
-//     */
-//    @Bean
-//    @ConditionalOnProperty(name = "spring.datasource.druid.web-stat-filter.enabled", havingValue = "true")
-//    public FilterRegistrationBean<DruidAdRemoveFilter> druidAdRemoveFilterFilter(DruidStatProperties properties) {
-//        // 获取 druid web 监控页面的参数
-//        DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
-//        // 提取 common.js 的配置路径
-//        String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";
-//        String commonJsPattern = pattern.replaceAll("\\*", "js/common.js");
-//        // 创建 DruidAdRemoveFilter Bean
-//        FilterRegistrationBean<DruidAdRemoveFilter> registrationBean = new FilterRegistrationBean<>();
-//        registrationBean.setFilter(new DruidAdRemoveFilter());
-//        registrationBean.addUrlPatterns(commonJsPattern);
-//        return registrationBean;
-//    }
-//
-//}

+ 0 - 38
src/main/java/cn/flowbb/framework/mybatis/datasource/core/filter/DruidAdRemoveFilter.java

@@ -1,38 +0,0 @@
-//package cn.flowbb.rk.framework.datasource.core.filter;
-//
-//import com.alibaba.druid.util.Utils;
-//import org.springframework.web.filter.OncePerRequestFilter;
-//
-//import javax.servlet.FilterChain;
-//import javax.servlet.ServletException;
-//import javax.servlet.http.HttpServletRequest;
-//import javax.servlet.http.HttpServletResponse;
-//import java.io.IOException;
-//
-///**
-// * Druid 底部广告过滤器
-// *
-// * @author 芋道源码
-// */
-//public class DruidAdRemoveFilter extends OncePerRequestFilter {
-//
-//    /**
-//     * common.js 的路径
-//     */
-//    private static final String COMMON_JS_ILE_PATH = "support/http/resources/js/common.js";
-//
-//    @Override
-//    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
-//            throws ServletException, IOException {
-//        chain.doFilter(request, response);
-//        // 重置缓冲区,响应头不会被重置
-//        response.resetBuffer();
-//        // 获取 common.js
-//        String text = Utils.readFromResource(COMMON_JS_ILE_PATH);
-//        // 正则替换 banner, 除去底部的广告信息
-//        text = text.replaceAll("<a.*?banner\"></a><br/>", "");
-//        text = text.replaceAll("powered.*?shrek.wang</a>", "");
-//        response.getWriter().write(text);
-//    }
-//
-//}

+ 3 - 3
src/main/java/cn/flowbb/framework/mybatis/common/exception/ErrorCode.java

@@ -1,7 +1,7 @@
-package cn.flowbb.framework.mybatis.common.exception;
+package mybatisex.common.exception;
 
-import cn.flowbb.framework.mybatis.common.exception.enums.GlobalErrorCodeConstants;
-import cn.flowbb.framework.mybatis.common.exception.enums.ServiceErrorCodeRange;
+import mybatisex.common.exception.enums.GlobalErrorCodeConstants;
+import mybatisex.common.exception.enums.ServiceErrorCodeRange;
 
 /**
  * 错误码对象

+ 2 - 2
src/main/java/cn/flowbb/framework/mybatis/common/exception/ServerException.java

@@ -1,8 +1,8 @@
-package cn.flowbb.framework.mybatis.common.exception;
+package mybatisex.common.exception;
 
 import java.util.Objects;
 
-import cn.flowbb.framework.mybatis.common.exception.enums.GlobalErrorCodeConstants;
+import mybatisex.common.exception.enums.GlobalErrorCodeConstants;
 
 
 /**

+ 2 - 2
src/main/java/cn/flowbb/framework/mybatis/common/exception/ServiceException.java

@@ -1,8 +1,8 @@
-package cn.flowbb.framework.mybatis.common.exception;
+package mybatisex.common.exception;
 
 import java.util.Objects;
 
-import cn.flowbb.framework.mybatis.common.exception.enums.ServiceErrorCodeRange;
+import mybatisex.common.exception.enums.ServiceErrorCodeRange;
 
 /**
  * 业务逻辑异常 Exception

+ 39 - 0
src/main/java/mybatisex/common/exception/enums/GlobalErrorCodeConstants.java

@@ -0,0 +1,39 @@
+package mybatisex.common.exception.enums;
+
+import mybatisex.common.exception.ErrorCode;
+
+/**
+ * 全局错误码枚举 0-999 系统异常编码保留
+ *
+ * 一般情况下,使用 HTTP 响应状态码 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
+ * 虽然说,HTTP 响应状态码作为业务使用表达能力偏弱,但是使用在系统层面还是非常不错的 比较特殊的是,因为之前一直使用 0 作为成功,就不使用 200
+ * 啦。
+ *
+ * 
+ */
+public interface GlobalErrorCodeConstants {
+
+	ErrorCode SUCCESS = new ErrorCode(0, "成功");
+
+	// ========== 客户端错误段 ==========
+
+	ErrorCode BAD_REQUEST = new ErrorCode(400, "请求参数不正确");
+	ErrorCode UNAUTHORIZED = new ErrorCode(401, "账号未登录");
+	ErrorCode FORBIDDEN = new ErrorCode(403, "没有该操作权限");
+	ErrorCode NOT_FOUND = new ErrorCode(404, "请求未找到");
+	ErrorCode METHOD_NOT_ALLOWED = new ErrorCode(405, "请求方法不正确");
+	ErrorCode LOCKED = new ErrorCode(423, "请求失败,请稍后重试"); // 并发请求,不允许
+	ErrorCode TOO_MANY_REQUESTS = new ErrorCode(429, "请求过于频繁,请稍后重试");
+
+	// ========== 服务端错误段 ==========
+
+	ErrorCode INTERNAL_SERVER_ERROR = new ErrorCode(500, "系统异常");
+	ErrorCode NOT_IMPLEMENTED = new ErrorCode(501, "功能未实现/未开启");
+
+	// ========== 自定义错误段 ==========
+	ErrorCode REPEATED_REQUESTS = new ErrorCode(900, "重复请求,请稍后重试"); // 重复请求
+	ErrorCode DEMO_DENY = new ErrorCode(901, "演示模式,禁止写操作");
+
+	ErrorCode UNKNOWN = new ErrorCode(999, "未知错误");
+
+}

+ 1 - 2
src/main/java/cn/flowbb/framework/mybatis/common/exception/enums/ServiceErrorCodeRange.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.common.exception.enums;
+package mybatisex.common.exception.enums;
 
 /**
  * 业务异常的错误码区间,解决:解决各模块错误码定义,避免重复,在此只声明不做实际使用
@@ -25,7 +25,6 @@ package cn.flowbb.framework.mybatis.common.exception.enums;
  *       不限制规则。
  *       一般建议,每个模块自增。
  *
- * @author 芋道源码
  */
 public class ServiceErrorCodeRange {
 

+ 123 - 0
src/main/java/mybatisex/common/exception/util/ServiceExceptionUtil.java

@@ -0,0 +1,123 @@
+package  mybatisex.common.exception.util;
+
+import mybatisex.common.exception.ErrorCode;
+import mybatisex.common.exception.ServiceException;
+import mybatisex.common.exception.enums.GlobalErrorCodeConstants;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * {@link ServiceException} 工具类
+ *
+ * 目的在于,格式化异常信息提示。 考虑到 String.format 在参数不正确时会报错,因此使用 {} 作为占位符,并使用
+ * {@link #doFormat(int, String, Object...)} 方法来格式化
+ *
+ * 因为 {@link #MESSAGES} 里面默认是没有异常信息提示的模板的,所以需要使用方自己初始化进去。目前想到的有几种方式:
+ *
+ * 1. 异常提示信息,写在枚举类中,例如说,cn.iocoder.oceans.user.api.constants.ErrorCodeEnum 类 +
+ * ServiceExceptionConfiguration 2. 异常提示信息,写在 .properties 等等配置文件 3. 异常提示信息,写在
+ * Apollo 等等配置中心中,从而实现可动态刷新 4. 异常提示信息,存储在 db 等等数据库中,从而实现可动态刷新
+ */
+
+public class ServiceExceptionUtil {
+	private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ServiceExceptionUtil.class);
+	/**
+	 * 错误码提示模板
+	 */
+	private static final ConcurrentMap<Integer, String> MESSAGES = new ConcurrentHashMap<>();
+
+	public static void putAll(Map<Integer, String> messages) {
+		ServiceExceptionUtil.MESSAGES.putAll(messages);
+	}
+
+	public static void put(Integer code, String message) {
+		ServiceExceptionUtil.MESSAGES.put(code, message);
+	}
+
+	public static void delete(Integer code, String message) {
+		ServiceExceptionUtil.MESSAGES.remove(code, message);
+	}
+
+	// ========== 和 ServiceException 的集成 ==========
+
+	public static ServiceException exception(ErrorCode errorCode) {
+		String messagePattern = MESSAGES.getOrDefault(errorCode.getCode(), errorCode.getMsg());
+		return exception0(errorCode.getCode(), messagePattern);
+	}
+
+	public static ServiceException exception(ErrorCode errorCode, Object... params) {
+		String messagePattern = MESSAGES.getOrDefault(errorCode.getCode(), errorCode.getMsg());
+		return exception0(errorCode.getCode(), messagePattern, params);
+	}
+
+	/**
+	 * 创建指定编号的 ServiceException 的异常
+	 *
+	 * @param code 编号
+	 * @return 异常
+	 */
+	public static ServiceException exception(Integer code) {
+		return exception0(code, MESSAGES.get(code));
+	}
+
+	/**
+	 * 创建指定编号的 ServiceException 的异常
+	 *
+	 * @param code   编号
+	 * @param params 消息提示的占位符对应的参数
+	 * @return 异常
+	 */
+	public static ServiceException exception(Integer code, Object... params) {
+		return exception0(code, MESSAGES.get(code), params);
+	}
+
+	public static ServiceException exception0(Integer code, String messagePattern, Object... params) {
+		String message = doFormat(code, messagePattern, params);
+		return new ServiceException(code, message);
+	}
+
+	public static ServiceException invalidParamException(String messagePattern, Object... params) {
+		return exception0(GlobalErrorCodeConstants.BAD_REQUEST.getCode(), messagePattern, params);
+	}
+
+	// ========== 格式化方法 ==========
+
+	/**
+	 * 将错误编号对应的消息使用 params 进行格式化。
+	 *
+	 * @param code           错误编号
+	 * @param messagePattern 消息模版
+	 * @param params         参数
+	 * @return 格式化后的提示
+	 */
+	public static String doFormat(int code, String messagePattern, Object... params) {
+		StringBuilder sbuf = new StringBuilder(messagePattern.length() + 50);
+		int i = 0;
+		int j;
+		int l;
+		for (l = 0; l < params.length; l++) {
+			j = messagePattern.indexOf("{}", i);
+			if (j == -1) {
+				log.error("[doFormat][参数过多:错误码({})|错误内容({})|参数({})", code, messagePattern, params);
+				if (i == 0) {
+					return messagePattern;
+				} else {
+					sbuf.append(messagePattern.substring(i));
+					return sbuf.toString();
+				}
+			} else {
+				sbuf.append(messagePattern, i, j);
+				sbuf.append(params[l]);
+				i = j + 2;
+			}
+		}
+		if (messagePattern.indexOf("{}", i) != -1) {
+			log.error("[doFormat][参数过少:错误码({})|错误内容({})|参数({})", code, messagePattern, params);
+		}
+		sbuf.append(messagePattern.substring(i));
+		return sbuf.toString();
+	}
+
+}

+ 4 - 4
src/main/java/cn/flowbb/framework/mybatis/common/pojo/CommonResult.java

@@ -1,13 +1,13 @@
-package cn.flowbb.framework.mybatis.common.pojo;
+package mybatisex.common.pojo;
 
 import java.io.Serializable;
 import java.util.Objects;
 
 import org.springframework.util.Assert;
 
-import cn.flowbb.framework.mybatis.common.exception.ErrorCode;
-import cn.flowbb.framework.mybatis.common.exception.ServiceException;
-import cn.flowbb.framework.mybatis.common.exception.enums.GlobalErrorCodeConstants;
+import mybatisex.common.exception.ErrorCode;
+import mybatisex.common.exception.ServiceException;
+import mybatisex.common.exception.enums.GlobalErrorCodeConstants;
 
 /**
  * 通用返回

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/common/pojo/PageParam.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.common.pojo;
+package mybatisex.common.pojo;
 
 import java.io.Serializable;
 

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/common/pojo/PageResult.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.common.pojo;
+package mybatisex.common.pojo;
 
 import java.io.Serializable;
 import java.util.ArrayList;

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/common/pojo/SortablePageParam.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.common.pojo;
+package mybatisex.common.pojo;
 
 import java.util.List;
 

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/common/pojo/SortingField.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.common.pojo;
+package mybatisex.common.pojo;
 
 import java.io.Serializable;
 

+ 5 - 5
src/main/java/cn/flowbb/framework/mybatis/config/IdTypeEnvironmentPostProcessor.java

@@ -1,12 +1,12 @@
-package cn.flowbb.framework.mybatis.config;
+package mybatisex.config;
 
 //import cn.hutool.core.util.StrUtil;
 
 //import cn.hutool.core.util.StrUtil;
 
-import cn.flowbb.framework.mybatis.core.enums.SqlConstants;
-import cn.flowbb.framework.mybatis.core.util.JdbcUtils;
-import cn.flowbb.framework.mybatis.core.util.SetUtils;
+import mybatisex.core.enums.SqlConstants;
+import mybatisex.core.util.JdbcUtils;
+import mybatisex.core.util.SetUtils;
 
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -21,7 +21,7 @@ import java.util.Set;
 /**
  * 当 IdType 为 {@link IdType#NONE} 时,根据 PRIMARY 数据源所使用的数据库,自动设置
  *
- * @author 芋道源码
+ 
  */
 
 public class IdTypeEnvironmentPostProcessor implements EnvironmentPostProcessor {

+ 3 - 5
src/main/java/cn/flowbb/framework/mybatis/config/YudaoMybatisAutoConfiguration.java

@@ -1,7 +1,5 @@
-package cn.flowbb.framework.mybatis.config;
+package  mybatisex.config;
 
-import org.apache.ibatis.annotations.Mapper;
-import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Bean;
@@ -18,12 +16,12 @@ import com.baomidou.mybatisplus.extension.incrementer.PostgreKeyGenerator;
 /**
  * MyBaits 配置类
  *
- * @author 芋道源码
+ 
  */
 @AutoConfiguration
 // Mapper																										
 // 懒加载,目前仅用于单元测试
-public class YudaoMybatisAutoConfiguration {
+public class MybatisAutoConfiguration {
 
 //	@Bean
 //	public MybatisPlusInterceptor mybatisPlusInterceptor() {

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/collection/ArrayIter.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.collection;
+package mybatisex.core.collection;
 
 
 import java.lang.reflect.Array;

+ 2 - 2
src/main/java/cn/flowbb/framework/mybatis/core/dataobject/BaseDO.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.dataobject;
+package mybatisex.core.dataobject;
 
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
@@ -12,7 +12,7 @@ import java.time.LocalDateTime;
 /**
  * 基础实体对象
  *
- * @author 芋道源码
+ * @author 
  */
 
 public abstract class BaseDO implements Serializable {

+ 2 - 2
src/main/java/cn/flowbb/framework/mybatis/core/enums/SqlConstants.java

@@ -1,11 +1,11 @@
-package cn.flowbb.framework.mybatis.core.enums;
+package mybatisex.core.enums;
 
 import com.baomidou.mybatisplus.annotation.DbType;
 
 /**
  * SQL相关常量类
  *
- * @author 芋道源码
+ *  
  */
 public class SqlConstants {
 

+ 2 - 2
src/main/java/cn/flowbb/framework/mybatis/core/handler/DefaultDBFieldHandler.java

@@ -1,6 +1,6 @@
-package cn.flowbb.framework.mybatis.core.handler;
+package mybatisex.core.handler;
 
-import cn.flowbb.framework.mybatis.core.dataobject.BaseDO;
+import mybatisex.core.dataobject.BaseDO;
 
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 import org.apache.ibatis.reflection.MetaObject;

+ 5 - 12
src/main/java/cn/flowbb/framework/mybatis/core/mapper/BaseMapperX.java

@@ -1,18 +1,17 @@
-package cn.flowbb.framework.mybatis.core.mapper;
+package mybatisex.core.mapper;
 
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import org.apache.ibatis.annotations.Param;
+
 import org.apache.ibatis.logging.Log;
 import org.apache.ibatis.logging.LogFactory;
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
+
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.enums.SqlMethod;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.toolkit.ClassUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -21,14 +20,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.toolkit.Db;
 import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
 import com.github.yulichang.base.MPJBaseMapper;
-import com.github.yulichang.interfaces.MPJBaseJoin;
-import com.github.yulichang.wrapper.MPJLambdaWrapper;
-import cn.flowbb.framework.mybatis.common.pojo.PageParam;
-import cn.flowbb.framework.mybatis.common.pojo.PageResult;
-import cn.flowbb.framework.mybatis.common.pojo.SortablePageParam;
-import cn.flowbb.framework.mybatis.common.pojo.SortingField;
-import cn.flowbb.framework.mybatis.core.util.DbX;
-import cn.flowbb.framework.mybatis.core.util.MyBatisUtils;
+
+import mybatisex.core.util.DbX;
 
 /**
  * 在 MyBatis Plus 的 BaseMapper 的基础上拓展,提供更多的能力

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/mapper/LambdaColumnWrapper.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.mapper;
+package mybatisex.core.mapper;
 import java.lang.invoke.CallSite;
 import java.lang.invoke.LambdaMetafactory;
 import java.lang.invoke.MethodHandles;

+ 6 - 6
src/main/java/cn/flowbb/framework/mybatis/core/mapper/PlusBaseMapperX.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.mapper;
+package mybatisex.core.mapper;
 
 import java.beans.PropertyDescriptor;
 import java.lang.reflect.Method;
@@ -27,11 +27,11 @@ import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
 import com.github.yulichang.interfaces.MPJBaseJoin;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 
-import cn.flowbb.framework.mybatis.common.pojo.PageParam;
-import cn.flowbb.framework.mybatis.common.pojo.PageResult;
-import cn.flowbb.framework.mybatis.common.pojo.SortablePageParam;
-import cn.flowbb.framework.mybatis.common.pojo.SortingField;
-import cn.flowbb.framework.mybatis.core.util.MyBatisUtils;
+import mybatisex.common.pojo.PageParam;
+import mybatisex.common.pojo.PageResult;
+import mybatisex.common.pojo.SortablePageParam;
+import mybatisex.common.pojo.SortingField;
+import mybatisex.core.util.MyBatisUtils;
 
 /**
  * 对实体类的操作

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/mapper/QueryEntity.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.mapper;
+package mybatisex.core.mapper;
 import com.baomidou.mybatisplus.annotation.TableField;
 
 public class QueryEntity {

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/mapper/QueryKeyword.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.mapper;
+package mybatisex.core.mapper;
 
 import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;

+ 2 - 2
src/main/java/cn/flowbb/framework/mybatis/core/mapper/QueryLambdaUtil.java

@@ -1,6 +1,6 @@
-package cn.flowbb.framework.mybatis.core.mapper;
+package mybatisex.core.mapper;
 
-import static cn.flowbb.framework.mybatis.core.mapper.LambdaColumnWrapper.getSFunction;
+import static mybatisex.core.mapper.LambdaColumnWrapper.getSFunction;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/mapper/QueryMap.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.mapper;
+package mybatisex.core.mapper;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/mapper/QueryWapper.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.mapper;
+package mybatisex.core.mapper;
 import org.springframework.stereotype.Indexed;
 
 import java.lang.annotation.*;

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/mapper/QueryWrapperUtil.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.mapper;
+package mybatisex.core.mapper;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;

+ 138 - 0
src/main/java/mybatisex/core/query/LambdaQueryWrapperX.java

@@ -0,0 +1,138 @@
+package mybatisex.core.query;
+
+import java.util.Collection;
+
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
+
+import mybatisex.core.util.ArrayUtils;
+import mybatisex.core.util.ObjectUtil;
+
+/**
+ * 拓展 MyBatis Plus QueryWrapper 类,主要增加如下功能:
+ * <p>
+ * 1. 拼接条件的方法,增加 xxxIfPresent 方法,用于判断值不存在的时候,不要拼接到条件中。
+ *
+ * @param <T> 数据类型
+ */
+public class LambdaQueryWrapperX<T> extends LambdaQueryWrapper<T> {
+
+	private static final long serialVersionUID = -8898497335185097393L;
+
+	public LambdaQueryWrapperX<T> likeIfPresent(SFunction<T, ?> column, String val) {
+		if (StringUtils.hasText(val)) {
+			return (LambdaQueryWrapperX<T>) super.like(column, val);
+		}
+		return this;
+	}
+
+	public LambdaQueryWrapperX<T> inIfPresent(SFunction<T, ?> column, Collection<?> values) {
+		if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtils.isEmpty(values)) {
+			return (LambdaQueryWrapperX<T>) super.in(column, values);
+		}
+		return this;
+	}
+
+	public LambdaQueryWrapperX<T> inIfPresent(SFunction<T, ?> column, Object... values) {
+		if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtils.isEmpty(values)) {
+			return (LambdaQueryWrapperX<T>) super.in(column, values);
+		}
+		return this;
+	}
+
+	public LambdaQueryWrapperX<T> eqIfPresent(SFunction<T, ?> column, Object val) {
+		if (ObjectUtil.isNotEmpty(val)) {
+			return (LambdaQueryWrapperX<T>) super.eq(column, val);
+		}
+		return this;
+	}
+
+	public LambdaQueryWrapperX<T> neIfPresent(SFunction<T, ?> column, Object val) {
+		if (ObjectUtil.isNotEmpty(val)) {
+			return (LambdaQueryWrapperX<T>) super.ne(column, val);
+		}
+		return this;
+	}
+
+	public LambdaQueryWrapperX<T> gtIfPresent(SFunction<T, ?> column, Object val) {
+		if (val != null) {
+			return (LambdaQueryWrapperX<T>) super.gt(column, val);
+		}
+		return this;
+	}
+
+	public LambdaQueryWrapperX<T> geIfPresent(SFunction<T, ?> column, Object val) {
+		if (val != null) {
+			return (LambdaQueryWrapperX<T>) super.ge(column, val);
+		}
+		return this;
+	}
+
+	public LambdaQueryWrapperX<T> ltIfPresent(SFunction<T, ?> column, Object val) {
+		if (val != null) {
+			return (LambdaQueryWrapperX<T>) super.lt(column, val);
+		}
+		return this;
+	}
+
+	public LambdaQueryWrapperX<T> leIfPresent(SFunction<T, ?> column, Object val) {
+		if (val != null) {
+			return (LambdaQueryWrapperX<T>) super.le(column, val);
+		}
+		return this;
+	}
+
+	public LambdaQueryWrapperX<T> betweenIfPresent(SFunction<T, ?> column, Object val1, Object val2) {
+		if (val1 != null && val2 != null) {
+			return (LambdaQueryWrapperX<T>) super.between(column, val1, val2);
+		}
+		if (val1 != null) {
+			return (LambdaQueryWrapperX<T>) ge(column, val1);
+		}
+		if (val2 != null) {
+			return (LambdaQueryWrapperX<T>) le(column, val2);
+		}
+		return this;
+	}
+
+	public LambdaQueryWrapperX<T> betweenIfPresent(SFunction<T, ?> column, Object[] values) {
+		Object val1 = ArrayUtils.get(values, 0);
+		Object val2 = ArrayUtils.get(values, 1);
+		return betweenIfPresent(column, val1, val2);
+	}
+
+	// ========== 重写父类方法,方便链式调用 ==========
+
+	@Override
+	public LambdaQueryWrapperX<T> eq(boolean condition, SFunction<T, ?> column, Object val) {
+		super.eq(condition, column, val);
+		return this;
+	}
+
+	@Override
+	public LambdaQueryWrapperX<T> eq(SFunction<T, ?> column, Object val) {
+		super.eq(column, val);
+		return this;
+	}
+
+	@Override
+	public LambdaQueryWrapperX<T> orderByDesc(SFunction<T, ?> column) {
+		super.orderByDesc(true, column);
+		return this;
+	}
+
+	@Override
+	public LambdaQueryWrapperX<T> last(String lastSql) {
+		super.last(lastSql);
+		return this;
+	}
+
+	@Override
+	public LambdaQueryWrapperX<T> in(SFunction<T, ?> column, Collection<?> coll) {
+		super.in(column, coll);
+		return this;
+	}
+
+}

+ 3 - 3
src/main/java/cn/flowbb/framework/mybatis/core/query/MPJLambdaWrapperX.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.query;
+package mybatisex.core.query;
 
 
 
@@ -12,8 +12,8 @@ import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.github.yulichang.toolkit.MPJWrappers;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 
-import cn.flowbb.framework.mybatis.core.util.ArrayUtils;
-import cn.flowbb.framework.mybatis.core.util.ObjectUtil;
+import mybatisex.core.util.ArrayUtils;
+import mybatisex.core.util.ObjectUtil;
 
 /**
  * 拓展 MyBatis Plus Join QueryWrapper 类,主要增加如下功能:

+ 2 - 2
src/main/java/cn/flowbb/framework/mybatis/core/query/QueryWrapperX.java

@@ -1,7 +1,7 @@
-package cn.flowbb.framework.mybatis.core.query;
+package mybatisex.core.query;
 
 
-import cn.flowbb.framework.mybatis.core.enums.SqlConstants;
+import mybatisex.core.enums.SqlConstants;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
 import com.baomidou.mybatisplus.core.toolkit.Assert;

+ 2 - 7
src/main/java/cn/flowbb/framework/mybatis/core/service/AbstractService.java

@@ -1,21 +1,16 @@
-package cn.flowbb.framework.mybatis.core.service;
+package mybatisex.core.service;
 
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.github.yulichang.base.MPJBaseService;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 
-import cn.flowbb.framework.mybatis.core.mapper.PlusBaseMapperX;
-import cn.flowbb.framework.mybatis.core.mapper.QueryWrapperUtil;
+import mybatisex.core.mapper.PlusBaseMapperX;
 
 public interface AbstractService<T> extends MPJBaseService<T> {
 

+ 3 - 3
src/main/java/cn/flowbb/framework/mybatis/core/service/impl/AbstractServiceImpl.java

@@ -1,9 +1,9 @@
-package cn.flowbb.framework.mybatis.core.service.impl;
+package mybatisex.core.service.impl;
 
 import com.github.yulichang.base.MPJBaseServiceImpl;
 
-import cn.flowbb.framework.mybatis.core.mapper.PlusBaseMapperX;
-import cn.flowbb.framework.mybatis.core.service.AbstractService;
+import mybatisex.core.mapper.PlusBaseMapperX;
+import mybatisex.core.service.AbstractService;
 
 /**
  * public class AbstractServiceImpl<M , T> extends ServiceImpl<BaseMapper<T>, T>

+ 2 - 2
src/main/java/cn/flowbb/framework/mybatis/core/type/EncryptTypeHandler.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.type;
+package mybatisex.core.type;
 
 import cn.hutool.core.lang.Assert;
 import cn.hutool.crypto.SecureUtil;
@@ -16,7 +16,7 @@ import java.sql.SQLException;
  * 字段字段的 TypeHandler 实现类,基于 {@link cn.hutool.crypto.symmetric.AES} 实现
  * 可通过 jasypt.encryptor.password 配置项,设置密钥
  *
- * @author 芋道源码
+ * @author  
  */
 public class EncryptTypeHandler extends BaseTypeHandler<String> {
 

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/type/IntegerListTypeHandler.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.type;
+package mybatisex.core.type;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;

+ 2 - 2
src/main/java/cn/flowbb/framework/mybatis/core/type/LongListTypeHandler.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.type;
+package mybatisex.core.type;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
@@ -19,7 +19,7 @@ import java.util.stream.Collectors;
 /**
  * List<Long> 的类型转换器实现类,对应数据库的 varchar 类型
  *
- * @author 芋道源码
+ * @author  
  */
 @MappedJdbcTypes(JdbcType.VARCHAR)
 @MappedTypes(List.class)

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/type/StringListTypeHandler.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.type;
+package mybatisex.core.type;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/util/ArrayUtils.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.util;
+package mybatisex.core.util;
 
 import java.lang.reflect.Array;
 

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/util/CollUtil.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.util;
+package mybatisex.core.util;
 
 import java.util.ArrayList;
 import java.util.Collection;

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/util/CollectionHandlerUtils.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.util;
+package mybatisex.core.util;
 
 import java.util.*;
 import java.util.function.*;

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/util/DbX.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.util;
+package mybatisex.core.util;
 
 import java.util.Collection;
 import java.util.HashMap;

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/util/IterUtil.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.util;
+package mybatisex.core.util;
 
 import java.util.Iterator;
 

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/util/JdbcUtils.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.util;
+package mybatisex.core.util;
 
 import com.baomidou.mybatisplus.annotation.DbType;
 

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/util/MapUtils.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.util;
+package mybatisex.core.util;
 
 
 

+ 3 - 3
src/main/java/cn/flowbb/framework/mybatis/core/util/MyBatisUtils.java

@@ -1,9 +1,9 @@
-package cn.flowbb.framework.mybatis.core.util;
+package mybatisex.core.util;
 
 
 
-import cn.flowbb.framework.mybatis.common.pojo.PageParam;
-import cn.flowbb.framework.mybatis.common.pojo.SortingField;
+import mybatisex.common.pojo.PageParam;
+import mybatisex.common.pojo.SortingField;
 import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/util/ObjectUtil.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.util;
+package mybatisex.core.util;
 
 import java.util.Iterator;
 import java.util.Map;

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/util/SetUtils.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.util;
+package mybatisex.core.util;
 
 import java.util.Set;
 

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/core/util/StrUtils.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.core.util;
+package mybatisex.core.util;
 
 /**
  * 字符串工具类

+ 1 - 1
src/main/java/cn/flowbb/framework/mybatis/datasource/core/enums/DataSourceEnum.java

@@ -1,4 +1,4 @@
-package cn.flowbb.framework.mybatis.datasource.core.enums;
+package mybatisex.datasource.core.enums;
 
 /**
  * 对应于多数据源中不同数据源配置