diff --git a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/tookit/VersionUtils.java b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/tookit/VersionUtils.java index 6a38ff7..66b55b0 100644 --- a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/tookit/VersionUtils.java +++ b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/tookit/VersionUtils.java @@ -1,5 +1,8 @@ package com.github.yulichang.adapter.base.tookit; +import com.baomidou.mybatisplus.core.MybatisPlusVersion; +import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils; + /** * 版本工具类 * @@ -8,8 +11,24 @@ package com.github.yulichang.adapter.base.tookit; */ public class VersionUtils { + public static String version = MybatisPlusVersion.getVersion(); + + @SuppressWarnings("unused") + public static void setMybatisPlusVersion(String version) { + VersionUtils.version = version; + } + + public static String getVersion() { + if (version != null) { + return version; + } else { + throw ExceptionUtils.mpe("mybatis-plus version is blank, " + + "please add VersionUtils.setMybatisPlusVersion(?) code before running application"); + } + } + public static int compare(String v1, String v2) { - String[] v1s = v1.split("\\."); + String[] v1s = v1.split("-")[0].split("\\."); String[] v2s = v2.split("\\."); String[] vs = v1s.length > v2s.length ? v2s : v1s; diff --git a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/Adapter33x.java b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/Adapter33x.java index e684d9f..da166f4 100644 --- a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/Adapter33x.java +++ b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/Adapter33x.java @@ -1,6 +1,5 @@ package com.github.yulichang.adapter.v33x; -import com.baomidou.mybatisplus.core.MybatisPlusVersion; import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.StringPool; @@ -28,7 +27,7 @@ import java.util.function.Supplier; */ public class Adapter33x implements IAdapter { - private static final boolean is330 = VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.3.0") == 0; + private static final boolean is330 = VersionUtils.compare(VersionUtils.getVersion(), "3.3.0") == 0; @Override public boolean mpjHasLogic(TableInfo tableInfo) { diff --git a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v3431/src/main/java/com/github/yulichang/adapter/v3431/Adapter3431.java b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v3431/src/main/java/com/github/yulichang/adapter/v3431/Adapter3431.java index 2cbab37..04f3f84 100644 --- a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v3431/src/main/java/com/github/yulichang/adapter/v3431/Adapter3431.java +++ b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v3431/src/main/java/com/github/yulichang/adapter/v3431/Adapter3431.java @@ -1,6 +1,5 @@ package com.github.yulichang.adapter.v3431; -import com.baomidou.mybatisplus.core.MybatisPlusVersion; import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.StringPool; @@ -29,7 +28,7 @@ import java.util.stream.Collectors; @AllArgsConstructor public class Adapter3431 implements IAdapter { - private static final boolean v = VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.4.3") < 0; + private static final boolean v = VersionUtils.compare(VersionUtils.getVersion(), "3.4.3") < 0; @Override public String mpjMapping(TableFieldInfo tableFieldInfo) { diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/AdapterHelper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/AdapterHelper.java index 5c2631b..128ef6a 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/AdapterHelper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/AdapterHelper.java @@ -1,6 +1,5 @@ package com.github.yulichang.adapter; -import com.baomidou.mybatisplus.core.MybatisPlusVersion; import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils; import com.github.yulichang.adapter.base.IAdapter; import com.github.yulichang.adapter.base.tookit.VersionUtils; @@ -23,7 +22,7 @@ public class AdapterHelper { static { String lastAdapter = "3.5.8"; - String version = Optional.ofNullable(MybatisPlusVersion.getVersion()).orElse(lastAdapter); + String version = Optional.ofNullable(VersionUtils.getVersion()).orElse(lastAdapter); if (VersionUtils.compare(version, "3.5.6") >= 0) { adapter = new Adapter(); diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/JoinMapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/JoinMapper.java new file mode 100644 index 0000000..1b14f84 --- /dev/null +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/JoinMapper.java @@ -0,0 +1,137 @@ +package com.github.yulichang.base; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.github.yulichang.interfaces.MPJBaseJoin; +import com.github.yulichang.toolkit.Constant; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * join相关方法 + * + * @author yulichang + */ +public interface JoinMapper { + + /** + * 根据 Wrapper 条件,连表删除 + * + * @param wrapper joinWrapper + */ + int deleteJoin(@Param(Constants.WRAPPER) MPJBaseJoin wrapper); + + /** + * 根据 whereEntity 条件,更新记录 + * + * @param entity 实体对象 (set 条件值,可以为 null) + * @param wrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句) + */ + int updateJoin(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) MPJBaseJoin wrapper); + + /** + * 根据 whereEntity 条件,更新记录 (null字段也会更新 !!!) + * + * @param entity 实体对象 (set 条件值,可以为 null) + * @param wrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句) + */ + int updateJoinAndNull(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) MPJBaseJoin wrapper); + + /** + * 根据 Wrapper 条件,查询总记录数 + * + * @param wrapper joinWrapper + */ + Long selectJoinCount(@Param(Constants.WRAPPER) MPJBaseJoin wrapper); + + /** + * 连表查询返回一条记录 + * + * @param wrapper joinWrapper + * @return T + */ + default T selectJoinOne(@Param(Constants.WRAPPER) MPJBaseJoin wrapper) { + return selectJoinOne(null, wrapper); + } + + /** + * 连表查询返回一条记录 + * + * @param wrapper joinWrapper + * @param clazz resultType + */ + DTO selectJoinOne(@Param(Constant.CLAZZ) Class clazz, + @Param(Constants.WRAPPER) MPJBaseJoin wrapper); + + /** + * 连表查询返回Map + * + * @param wrapper joinWrapper + */ + default Map selectJoinMap(@Param(Constants.WRAPPER) MPJBaseJoin wrapper) { + //noinspection unchecked + return selectJoinOne(Map.class, wrapper); + } + + /** + * 连表查询返回记录集合 + * + * @param wrapper joinWrapper + * @return List<T> + */ + default List selectJoinList(@Param(Constants.WRAPPER) MPJBaseJoin wrapper) { + return selectJoinList(null, wrapper); + } + + /** + * 连表查询返回记录集合 + * + * @param wrapper joinWrapper + * @param clazz resultType + */ + List selectJoinList(@Param(Constant.CLAZZ) Class clazz, + @Param(Constants.WRAPPER) MPJBaseJoin wrapper); + + /** + * 连表查询返回Map集合 + * + * @param wrapper joinWrapper + */ + default List> selectJoinMaps(@Param(Constants.WRAPPER) MPJBaseJoin wrapper) { + //noinspection unchecked + return (List>) ((Object) selectJoinList(Map.class, wrapper)); + } + + /** + * 连表查询返回记录集合并分页 + * + * @param wrapper joinWrapper + */ + default

> P selectJoinPage(P page, @Param(Constants.WRAPPER) MPJBaseJoin wrapper) { + return selectJoinPage(page, null, wrapper); + } + + /** + * 连表查询返回记录集合并分页 + * + * @param wrapper joinWrapper + * @param clazz resultType + * @param 分页返回对象 + */ + > P selectJoinPage(P page, + @Param(Constant.CLAZZ) Class clazz, + @Param(Constants.WRAPPER) MPJBaseJoin wrapper); + + /** + * 连表查询返回Map集合并分页 + * + * @param wrapper joinWrapper + */ + default

>> P selectJoinMapsPage(P page, + @Param(Constants.WRAPPER) MPJBaseJoin wrapper) { + //noinspection unchecked,rawtypes + return (P) selectJoinPage((IPage) page, Map.class, wrapper); + } +} diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/JoinService.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/JoinService.java new file mode 100644 index 0000000..9870108 --- /dev/null +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/JoinService.java @@ -0,0 +1,93 @@ +package com.github.yulichang.base; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; +import com.github.yulichang.interfaces.MPJBaseJoin; + +import java.util.List; +import java.util.Map; + +@SuppressWarnings({"unchecked", "unused"}) +public interface JoinService { + + BaseMapper getBaseMapper(); + + /** + * 根据 Wrapper 条件,连表删除 + * + * @param wrapper joinWrapper + */ + default boolean deleteJoin(MPJBaseJoin wrapper) { + return SqlHelper.retBool(((JoinMapper) getBaseMapper()).deleteJoin(wrapper)); + } + + /** + * 根据 whereEntity 条件,更新记录 + * + * @param entity 实体对象 (set 条件值,可以为 null) + * @param wrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句) + */ + default boolean updateJoin(T entity, MPJBaseJoin wrapper) { + return SqlHelper.retBool(((JoinMapper) getBaseMapper()).updateJoin(entity, wrapper)); + } + + /** + * 根据 whereEntity 条件,更新记录 (null字段也会更新 !!!) + * + * @param entity 实体对象 (set 条件值,可以为 null) + * @param wrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句) + */ + default boolean updateJoinAndNull(T entity, MPJBaseJoin wrapper) { + return SqlHelper.retBool(((JoinMapper) getBaseMapper()).updateJoinAndNull(entity, wrapper)); + } + + /** + * 根据 Wrapper 条件,查询总记录数 + */ + default Long selectJoinCount(MPJBaseJoin wrapper) { + return ((JoinMapper) getBaseMapper()).selectJoinCount(wrapper); + } + + /** + * 连接查询返回一条记录 + */ + default DTO selectJoinOne(Class clazz, MPJBaseJoin wrapper) { + return ((JoinMapper) getBaseMapper()).selectJoinOne(clazz, wrapper); + } + + /** + * 连接查询返回集合 + */ + default List selectJoinList(Class clazz, MPJBaseJoin wrapper) { + return ((JoinMapper) getBaseMapper()).selectJoinList(clazz, wrapper); + } + + /** + * 连接查询返回集合并分页 + */ + default > P selectJoinListPage(P page, Class clazz, MPJBaseJoin wrapper) { + return ((JoinMapper) getBaseMapper()).selectJoinPage(page, clazz, wrapper); + } + + /** + * 连接查询返回Map + */ + default Map selectJoinMap(MPJBaseJoin wrapper) { + return ((JoinMapper) getBaseMapper()).selectJoinMap(wrapper); + } + + /** + * 连接查询返回Map集合 + */ + default List> selectJoinMaps(MPJBaseJoin wrapper) { + return ((JoinMapper) getBaseMapper()).selectJoinMaps(wrapper); + } + + /** + * 连接查询返回Map集合并分页 + */ + default

>> P selectJoinMapsPage(P page, MPJBaseJoin wrapper) { + return ((JoinMapper) getBaseMapper()).selectJoinMapsPage(page, wrapper); + } +} diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/MPJBaseMapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/MPJBaseMapper.java index f9ca429..8510606 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/MPJBaseMapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/MPJBaseMapper.java @@ -1,137 +1,11 @@ package com.github.yulichang.base; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.Constants; -import com.github.yulichang.interfaces.MPJBaseJoin; -import com.github.yulichang.toolkit.Constant; -import org.apache.ibatis.annotations.Param; - -import java.util.List; -import java.util.Map; /** * @author yulichang * @see BaseMapper */ -public interface MPJBaseMapper extends BaseMapper { +public interface MPJBaseMapper extends BaseMapper, JoinMapper { - /** - * 根据 Wrapper 条件,连表删除 - * - * @param wrapper joinWrapper - */ - int deleteJoin(@Param(Constants.WRAPPER) MPJBaseJoin wrapper); - - /** - * 根据 whereEntity 条件,更新记录 - * - * @param entity 实体对象 (set 条件值,可以为 null) - * @param wrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句) - */ - int updateJoin(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) MPJBaseJoin wrapper); - - /** - * 根据 whereEntity 条件,更新记录 (null字段也会更新 !!!) - * - * @param entity 实体对象 (set 条件值,可以为 null) - * @param wrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句) - */ - int updateJoinAndNull(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) MPJBaseJoin wrapper); - - /** - * 根据 Wrapper 条件,查询总记录数 - * - * @param wrapper joinWrapper - */ - Long selectJoinCount(@Param(Constants.WRAPPER) MPJBaseJoin wrapper); - - /** - * 连表查询返回一条记录 - * - * @param wrapper joinWrapper - * @return T - */ - default T selectJoinOne(@Param(Constants.WRAPPER) MPJBaseJoin wrapper) { - return selectJoinOne(null, wrapper); - } - - /** - * 连表查询返回一条记录 - * - * @param wrapper joinWrapper - * @param clazz resultType - */ - DTO selectJoinOne(@Param(Constant.CLAZZ) Class clazz, - @Param(Constants.WRAPPER) MPJBaseJoin wrapper); - - /** - * 连表查询返回Map - * - * @param wrapper joinWrapper - */ - default Map selectJoinMap(@Param(Constants.WRAPPER) MPJBaseJoin wrapper) { - //noinspection unchecked - return selectJoinOne(Map.class, wrapper); - } - - /** - * 连表查询返回记录集合 - * - * @param wrapper joinWrapper - * @return List<T> - */ - default List selectJoinList(@Param(Constants.WRAPPER) MPJBaseJoin wrapper) { - return selectJoinList(null, wrapper); - } - - /** - * 连表查询返回记录集合 - * - * @param wrapper joinWrapper - * @param clazz resultType - */ - List selectJoinList(@Param(Constant.CLAZZ) Class clazz, - @Param(Constants.WRAPPER) MPJBaseJoin wrapper); - - /** - * 连表查询返回Map集合 - * - * @param wrapper joinWrapper - */ - default List> selectJoinMaps(@Param(Constants.WRAPPER) MPJBaseJoin wrapper) { - //noinspection unchecked - return (List>) ((Object) selectJoinList(Map.class, wrapper)); - } - - /** - * 连表查询返回记录集合并分页 - * - * @param wrapper joinWrapper - */ - default

> P selectJoinPage(P page, @Param(Constants.WRAPPER) MPJBaseJoin wrapper) { - return selectJoinPage(page, null, wrapper); - } - - /** - * 连表查询返回记录集合并分页 - * - * @param wrapper joinWrapper - * @param clazz resultType - * @param 分页返回对象 - */ - > P selectJoinPage(P page, - @Param(Constant.CLAZZ) Class clazz, - @Param(Constants.WRAPPER) MPJBaseJoin wrapper); - - /** - * 连表查询返回Map集合并分页 - * - * @param wrapper joinWrapper - */ - default

>> P selectJoinMapsPage(P page, - @Param(Constants.WRAPPER) MPJBaseJoin wrapper) { - //noinspection unchecked,rawtypes - return (P) selectJoinPage((IPage) page, Map.class, wrapper); - } } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/MPJBaseService.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/MPJBaseService.java index a58bd4f..98e5a8d 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/MPJBaseService.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/MPJBaseService.java @@ -1,12 +1,6 @@ package com.github.yulichang.base; -import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; -import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; -import com.github.yulichang.interfaces.MPJBaseJoin; - -import java.util.List; -import java.util.Map; /** * 基础service @@ -15,84 +9,6 @@ import java.util.Map; * @author yulichang */ @SuppressWarnings({"unused"}) -public interface MPJBaseService extends IService { +public interface MPJBaseService extends IService, JoinService { - - /** - * 根据 Wrapper 条件,连表删除 - * - * @param wrapper joinWrapper - */ - default boolean deleteJoin(MPJBaseJoin wrapper) { - return SqlHelper.retBool(((MPJBaseMapper) getBaseMapper()).deleteJoin(wrapper)); - } - - /** - * 根据 whereEntity 条件,更新记录 - * - * @param entity 实体对象 (set 条件值,可以为 null) - * @param wrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句) - */ - default boolean updateJoin(T entity, MPJBaseJoin wrapper) { - return SqlHelper.retBool(((MPJBaseMapper) getBaseMapper()).updateJoin(entity, wrapper)); - } - - /** - * 根据 whereEntity 条件,更新记录 (null字段也会更新 !!!) - * - * @param entity 实体对象 (set 条件值,可以为 null) - * @param wrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句) - */ - default boolean updateJoinAndNull(T entity, MPJBaseJoin wrapper) { - return SqlHelper.retBool(((MPJBaseMapper) getBaseMapper()).updateJoinAndNull(entity, wrapper)); - } - - /** - * 根据 Wrapper 条件,查询总记录数 - */ - default Long selectJoinCount(MPJBaseJoin wrapper) { - return ((MPJBaseMapper) getBaseMapper()).selectJoinCount(wrapper); - } - - /** - * 连接查询返回一条记录 - */ - default DTO selectJoinOne(Class clazz, MPJBaseJoin wrapper) { - return ((MPJBaseMapper) getBaseMapper()).selectJoinOne(clazz, wrapper); - } - - /** - * 连接查询返回集合 - */ - default List selectJoinList(Class clazz, MPJBaseJoin wrapper) { - return ((MPJBaseMapper) getBaseMapper()).selectJoinList(clazz, wrapper); - } - - /** - * 连接查询返回集合并分页 - */ - default > P selectJoinListPage(P page, Class clazz, MPJBaseJoin wrapper) { - return ((MPJBaseMapper) getBaseMapper()).selectJoinPage(page, clazz, wrapper); - } - - /** - * 连接查询返回Map - */ - default Map selectJoinMap(MPJBaseJoin wrapper) { - return ((MPJBaseMapper) getBaseMapper()).selectJoinMap(wrapper); - } - - /** - * 连接查询返回Map集合 - */ - default List> selectJoinMaps(MPJBaseJoin wrapper) { - return ((MPJBaseMapper) getBaseMapper()).selectJoinMaps(wrapper); - } - - /** - * 连接查询返回Map集合并分页 - */ - default

>> P selectJoinMapsPage(P page, MPJBaseJoin wrapper) { - return ((MPJBaseMapper) getBaseMapper()).selectJoinMapsPage(page, wrapper); - } } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/injector/MPJSqlInjector.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/injector/MPJSqlInjector.java index 83a30e1..49a8474 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/injector/MPJSqlInjector.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/injector/MPJSqlInjector.java @@ -1,6 +1,5 @@ package com.github.yulichang.injector; -import com.baomidou.mybatisplus.core.MybatisPlusVersion; import com.baomidou.mybatisplus.core.injector.AbstractMethod; import com.baomidou.mybatisplus.core.injector.AbstractSqlInjector; import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; @@ -59,7 +58,7 @@ public class MPJSqlInjector extends DefaultSqlInjector { @Deprecated @SuppressWarnings({"unused", "DeprecatedIsStillUsed"}) public List getMethodList(Class mapperClass) { - if (VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.4.3.2") >= 0) { + if (VersionUtils.compare(VersionUtils.getVersion(), "3.4.3.2") >= 0) { throw ExceptionUtils.mpe("DefaultSqlInjector 的 getMethodList(Class mapperClass) 方法已在 3.4.3.2+ 改为" + "getMethodList(Class mapperClass, TableInfo tableInfo)\n"); } @@ -128,7 +127,7 @@ public class MPJSqlInjector extends DefaultSqlInjector { private List getJoinMethod() { List list = new ArrayList<>(); - if (VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.5.0") >= 0) { + if (VersionUtils.compare(VersionUtils.getVersion(), "3.5.0") >= 0) { list.add(new DeleteJoin(SqlMethod.DELETE_JOIN.getMethod())); list.add(new UpdateJoin(SqlMethod.UPDATE_JOIN.getMethod())); list.add(new UpdateJoinAndNull(SqlMethod.UPDATE_JOIN_AND_NULL.getMethod())); diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java index a8f4e87..4f96c3a 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java @@ -1,6 +1,5 @@ package com.github.yulichang.interceptor; -import com.baomidou.mybatisplus.core.MybatisPlusVersion; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; @@ -46,7 +45,7 @@ import java.util.concurrent.ConcurrentHashMap; @Intercepts(@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})) public class MPJInterceptor implements Interceptor { - private static final boolean v = VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.4.3.1") > 0; + private static final boolean v = VersionUtils.compare(VersionUtils.getVersion(), "3.4.3.1") > 0; private static final List EMPTY_RESULT_MAPPING = new ArrayList<>(0); diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java index e3a9625..80c1af5 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java @@ -1,6 +1,5 @@ package com.github.yulichang.query; -import com.baomidou.mybatisplus.core.MybatisPlusVersion; import com.baomidou.mybatisplus.core.conditions.AbstractWrapper; import com.baomidou.mybatisplus.core.conditions.SharedString; import com.baomidou.mybatisplus.core.conditions.query.Query; @@ -102,7 +101,7 @@ public class MPJQueryWrapper extends AbstractWrapper 0) { + if (VersionUtils.compare(VersionUtils.getVersion(), "3.3.0") > 0) { throw error; } } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/SqlHelper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/SqlHelper.java index 1063c25..afd4217 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/SqlHelper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/SqlHelper.java @@ -1,7 +1,7 @@ package com.github.yulichang.toolkit; import com.baomidou.mybatisplus.core.toolkit.Assert; -import com.github.yulichang.base.MPJBaseMapper; +import com.github.yulichang.base.JoinMapper; import java.util.function.Function; @@ -13,11 +13,11 @@ import java.util.function.Function; @SuppressWarnings("unchecked") public final class SqlHelper { - public static R exec(Class entityClass, Function, R> function) { + public static R exec(Class entityClass, Function, R> function) { Assert.notNull(entityClass, "请使用 new MPJLambdaWrapper(主表.class) 或 JoinWrappers.lambda(主表.class) 构造方法"); Object mapper = SpringContentUtils.getMapper(entityClass); Assert.notNull(mapper, "mapper not init <%s>", entityClass.getSimpleName()); - Assert.isTrue(mapper instanceof MPJBaseMapper, "mapper <%s> not extends MPJBaseMapper ", entityClass.getSimpleName()); - return function.apply((MPJBaseMapper) mapper); + Assert.isTrue(mapper instanceof JoinMapper, "mapper <%s> not extends MPJBaseMapper ", entityClass.getSimpleName()); + return function.apply((JoinMapper) mapper); } } diff --git a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java index a93cd11..d2a8e58 100644 --- a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java +++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java @@ -1,6 +1,5 @@ package com.github.yulichang.test.join; -import com.baomidou.mybatisplus.core.MybatisPlusVersion; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; @@ -86,38 +85,39 @@ class LambdaWrapperTest { @Test void testJoin() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.id AS joina_id,\n" + - " t1.user_id,\n" + - " t1.area_id,\n" + - " t1.tel,\n" + - " t1.address,\n" + - " t1.del AS joina_del,\n" + - " t2.id AS joinb_id,\n" + - " t2.province,\n" + - " t2.city,\n" + - " t2.area,\n" + - " t2.postcode,\n" + - " t2.del AS joinb_del\n" + - "FROM `user` t\n" + - " LEFT JOIN address t1 ON (t1.user_id = t.id)\n" + - " LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" + - "WHERE t.del = false\n" + - " AND t1.del = false\n" + - " AND t2.del = false\n" + - " AND (t.id <= ?)\n" + - "ORDER BY t.id DESC"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.id AS joina_id, + t1.user_id, + t1.area_id, + t1.tel, + t1.address, + t1.del AS joina_del, + t2.id AS joinb_id, + t2.province, + t2.city, + t2.area, + t2.postcode, + t2.del AS joinb_del + FROM `user` t + LEFT JOIN address t1 ON (t1.user_id = t.id) + LEFT JOIN area t2 ON (t2.id = t1.area_id) + WHERE t.del = false + AND t1.del = false + AND t2.del = false + AND (t.id <= ?) + ORDER BY t.id DESC"""); MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .selectAll(UserDO.class) .selectCollection(AddressDO.class, UserDTO::getAddressList, addr -> addr @@ -139,25 +139,26 @@ class LambdaWrapperTest { @Test void testJoinField() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.id AS joina_id\n" + - "FROM `user` t\n" + - " LEFT JOIN address t1 ON (t1.user_id = t.id)\n" + - "WHERE t.del = false\n" + - " AND t1.del = false\n" + - " AND (t.id <= ?)\n" + - "ORDER BY t.id DESC"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.id AS joina_id + FROM `user` t + LEFT JOIN address t1 ON (t1.user_id = t.id) + WHERE t.del = false + AND t1.del = false + AND (t.id <= ?) + ORDER BY t.id DESC"""); MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .selectAll(UserDO.class) @@ -176,37 +177,38 @@ class LambdaWrapperTest { @Test void testJoin1() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.id AS joina_id,\n" + - " t1.user_id,\n" + - " t1.area_id,\n" + - " t1.tel,\n" + - " t1.address,\n" + - " t1.del AS joina_del,\n" + - " t2.id AS joinb_id,\n" + - " t2.province,\n" + - " t2.city,\n" + - " t2.area,\n" + - " t2.postcode,\n" + - " t2.del AS joinb_del\n" + - "FROM `user` t\n" + - " LEFT JOIN address t1 ON (t1.user_id = t.id)\n" + - " LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" + - "WHERE t.del = false\n" + - " AND t1.del = false\n" + - " AND t2.del = false\n" + - "ORDER BY t.id DESC"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.id AS joina_id, + t1.user_id, + t1.area_id, + t1.tel, + t1.address, + t1.del AS joina_del, + t2.id AS joinb_id, + t2.province, + t2.city, + t2.area, + t2.postcode, + t2.del AS joinb_del + FROM `user` t + LEFT JOIN address t1 ON (t1.user_id = t.id) + LEFT JOIN area t2 ON (t2.id = t1.area_id) + WHERE t.del = false + AND t1.del = false + AND t2.del = false + ORDER BY t.id DESC"""); MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .selectAll(UserDO.class) .selectCollection(AddressDO.class, UserDTO::getAddressList, addr -> addr @@ -225,13 +227,14 @@ class LambdaWrapperTest { */ @Test void testWrapper() { - ThreadLocalUtils.set("SELECT t.id\n" + - "FROM `user` t\n" + - " LEFT JOIN address t1 ON (t1.user_id = t.id)\n" + - " LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" + - "WHERE t.del = false\n" + - " AND t1.del = false\n" + - " AND t2.del = false"); + ThreadLocalUtils.set(""" + SELECT t.id + FROM `user` t + LEFT JOIN address t1 ON (t1.user_id = t.id) + LEFT JOIN area t2 ON (t2.id = t1.area_id) + WHERE t.del = false + AND t1.del = false + AND t2.del = false"""); //基本数据类型 和 String MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .select(UserDO::getId) @@ -243,13 +246,14 @@ class LambdaWrapperTest { System.out.println(list); - ThreadLocalUtils.set("SELECT t.create_time\n" + - "FROM `user` t\n" + - " LEFT JOIN address t1 ON (t1.user_id = t.id)\n" + - " LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" + - "WHERE t.del = false\n" + - " AND t1.del = false\n" + - " AND t2.del = false"); + ThreadLocalUtils.set(""" + SELECT t.create_time + FROM `user` t + LEFT JOIN address t1 ON (t1.user_id = t.id) + LEFT JOIN area t2 ON (t2.id = t1.area_id) + WHERE t.del = false + AND t1.del = false + AND t2.del = false"""); //java.sql包下的类 MPJLambdaWrapper wrapper1 = new MPJLambdaWrapper() .select(UserDO::getCreateTime) @@ -264,23 +268,24 @@ class LambdaWrapperTest { @Test void testMSCache() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by\n" + - "FROM `user` t\n" + - "WHERE t.id = ?\n" + - " AND t.del = false\n" + - " AND (t.id <= ?)\n" + - "ORDER BY t.id ASC, t.`name` ASC"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by + FROM `user` t + WHERE t.id = ? + AND t.del = false + AND (t.id <= ?) + ORDER BY t.id ASC, t.`name` ASC"""); UserDO userDO = new UserDO(); userDO.setId(1); MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(userDO) @@ -297,21 +302,22 @@ class LambdaWrapperTest { @Test void testTableAliasR() { - ThreadLocalUtils.set("SELECT tt.id,\n" + - " tt.user_id,\n" + - " tt.create_by,\n" + - " tt.update_by,\n" + - " ua.`name` AS userName,\n" + - " ub.`name` AS createName,\n" + - " uc.`name` AS updateName\n" + - "FROM user_dto tt\n" + - " LEFT JOIN `user` ua ON (ua.id = tt.user_id)\n" + - " LEFT JOIN `user` ub ON (ub.id = tt.create_by)\n" + - " LEFT JOIN `user` uc ON (uc.id = tt.update_by)\n" + - "WHERE ua.del = false\n" + - " AND ub.del = false\n" + - " AND uc.del = false\n" + - " AND (ua.id <= ? AND ub.id >= ?)"); + ThreadLocalUtils.set(""" + SELECT tt.id, + tt.user_id, + tt.create_by, + tt.update_by, + ua.`name` AS userName, + ub.`name` AS createName, + uc.`name` AS updateName + FROM user_dto tt + LEFT JOIN `user` ua ON (ua.id = tt.user_id) + LEFT JOIN `user` ub ON (ub.id = tt.create_by) + LEFT JOIN `user` uc ON (uc.id = tt.update_by) + WHERE ua.del = false + AND ub.del = false + AND uc.del = false + AND (ua.id <= ? AND ub.id >= ?)"""); MPJLambdaWrapper wrapper = new MPJLambdaWrapper("tt") .selectAll(UserDto.class) .leftJoin(UserDO.class, "ua", UserDO::getId, UserDto::getUserId, ext -> ext @@ -328,29 +334,30 @@ class LambdaWrapperTest { assert StringUtils.isNotBlank(userDtos.get(0).getUpdateName()); - ThreadLocalUtils.set("SELECT tt.id,\n" + - " tt.pid,\n" + - " tt.`name`,\n" + - " tt.`json`,\n" + - " tt.sex,\n" + - " tt.head_img,\n" + - " tt.create_time,\n" + - " tt.address_id,\n" + - " tt.address_id2,\n" + - " tt.del,\n" + - " tt.create_by,\n" + - " tt.update_by,\n" + - " ua.id,\n" + - " ub.head_img\n" + - "FROM `user` tt\n" + - " LEFT JOIN `user` ua ON (ua.id = tt.pid)\n" + - " LEFT JOIN `user` ub ON (ub.id = tt.create_by)\n" + - " LEFT JOIN `user` uc ON (uc.id = tt.update_by)\n" + - "WHERE tt.del = false\n" + - " AND ua.del = false\n" + - " AND ub.del = false\n" + - " AND uc.del = false\n" + - " AND (ua.head_img = tt.`name` AND tt.id = ua.id)"); + ThreadLocalUtils.set(""" + SELECT tt.id, + tt.pid, + tt.`name`, + tt.`json`, + tt.sex, + tt.head_img, + tt.create_time, + tt.address_id, + tt.address_id2, + tt.del, + tt.create_by, + tt.update_by, + ua.id, + ub.head_img + FROM `user` tt + LEFT JOIN `user` ua ON (ua.id = tt.pid) + LEFT JOIN `user` ub ON (ub.id = tt.create_by) + LEFT JOIN `user` uc ON (uc.id = tt.update_by) + WHERE tt.del = false + AND ua.del = false + AND ub.del = false + AND uc.del = false + AND (ua.head_img = tt.`name` AND tt.id = ua.id)"""); MPJLambdaWrapper w = new MPJLambdaWrapper("tt") .selectAll(UserDO.class) .leftJoin(UserDO.class, "ua", UserDO::getId, UserDO::getPid, ext -> ext @@ -369,34 +376,35 @@ class LambdaWrapperTest { */ @Test void testInner() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.id AS joina_id,\n" + - " t1.pid AS joina_pid,\n" + - " t1.`name` AS joina_name,\n" + - " t1.`json` AS joina_json,\n" + - " t1.sex AS joina_sex,\n" + - " t1.head_img AS joina_head_img,\n" + - " t1.create_time AS joina_create_time,\n" + - " t1.address_id AS joina_address_id,\n" + - " t1.address_id2 AS joina_address_id2,\n" + - " t1.del AS joina_del,\n" + - " t1.create_by AS joina_create_by,\n" + - " t1.update_by AS joina_update_by\n" + - "FROM `user` t\n" + - " LEFT JOIN `user` t1 ON (t1.pid = t.id)\n" + - "WHERE t.del = false\n" + - " AND (t.id > ?)"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.id AS joina_id, + t1.pid AS joina_pid, + t1.`name` AS joina_name, + t1.`json` AS joina_json, + t1.sex AS joina_sex, + t1.head_img AS joina_head_img, + t1.create_time AS joina_create_time, + t1.address_id AS joina_address_id, + t1.address_id2 AS joina_address_id2, + t1.del AS joina_del, + t1.create_by AS joina_create_by, + t1.update_by AS joina_update_by + FROM `user` t + LEFT JOIN `user` t1 ON (t1.pid = t.id) + WHERE t.del = false + AND (t.id > ?)"""); //自连接 MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .disableSubLogicDel()//关闭副表逻辑删除 @@ -407,24 +415,25 @@ class LambdaWrapperTest { List list = userMapper.selectJoinList(UserDO.class, wrapper.clone()); System.out.println(list); - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.`name` AS createName,\n" + - " t2.`name` AS updateName\n" + - "FROM `user` t\n" + - " LEFT JOIN `user` t1 ON (t1.id = t.create_by)\n" + - " LEFT JOIN `user` t2 ON (t2.id = t.update_by)\n" + - "WHERE (t2.id = t.update_by AND t.id = t1.id)"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.`name` AS createName, + t2.`name` AS updateName + FROM `user` t + LEFT JOIN `user` t1 ON (t1.id = t.create_by) + LEFT JOIN `user` t2 ON (t2.id = t.update_by) + WHERE (t2.id = t.update_by AND t.id = t1.id)"""); //关联一张表多次 MPJLambdaWrapper w = new MPJLambdaWrapper() .disableLogicDel() @@ -442,48 +451,49 @@ class LambdaWrapperTest { assert dos.get(0).getCreateName() != null && dos.get(0).getUpdateName() != null; - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.`name` AS alias,\n" + - " t1.id AS joina_id,\n" + - " t1.pid AS joina_pid,\n" + - " t1.`name` AS joina_name,\n" + - " t1.`json` AS joina_json,\n" + - " t1.sex AS joina_sex,\n" + - " t1.head_img AS joina_head_img,\n" + - " t1.create_time AS joina_create_time,\n" + - " t1.address_id AS joina_address_id,\n" + - " t1.address_id2 AS joina_address_id2,\n" + - " t1.del AS joina_del,\n" + - " t1.create_by AS joina_create_by,\n" + - " t1.update_by AS joina_update_by,\n" + - " t2.id AS joinb_id,\n" + - " t2.pid AS joinb_pid,\n" + - " t2.`name` AS joinb_name,\n" + - " t2.`json` AS joinb_json,\n" + - " t2.sex AS joinb_sex,\n" + - " t2.head_img AS joinb_head_img,\n" + - " t2.create_time AS joinb_create_time,\n" + - " t2.address_id AS joinb_address_id,\n" + - " t2.address_id2 AS joinb_address_id2,\n" + - " t2.del AS joinb_del,\n" + - " t2.create_by AS joinb_create_by,\n" + - " t2.update_by AS joinb_update_by\n" + - "FROM `user` t\n" + - " LEFT JOIN `user` t1 ON (t1.pid = t.id)\n" + - " LEFT JOIN `user` t2 ON (t2.pid = t1.id)\n" + - "WHERE t.del = false\n" + - " AND (t1.id <= ? AND t.id <= ?)"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.`name` AS alias, + t1.id AS joina_id, + t1.pid AS joina_pid, + t1.`name` AS joina_name, + t1.`json` AS joina_json, + t1.sex AS joina_sex, + t1.head_img AS joina_head_img, + t1.create_time AS joina_create_time, + t1.address_id AS joina_address_id, + t1.address_id2 AS joina_address_id2, + t1.del AS joina_del, + t1.create_by AS joina_create_by, + t1.update_by AS joina_update_by, + t2.id AS joinb_id, + t2.pid AS joinb_pid, + t2.`name` AS joinb_name, + t2.`json` AS joinb_json, + t2.sex AS joinb_sex, + t2.head_img AS joinb_head_img, + t2.create_time AS joinb_create_time, + t2.address_id AS joinb_address_id, + t2.address_id2 AS joinb_address_id2, + t2.del AS joinb_del, + t2.create_by AS joinb_create_by, + t2.update_by AS joinb_update_by + FROM `user` t + LEFT JOIN `user` t1 ON (t1.pid = t.id) + LEFT JOIN `user` t2 ON (t2.pid = t1.id) + WHERE t.del = false + AND (t1.id <= ? AND t.id <= ?)"""); MPJLambdaWrapper wrapper1 = new MPJLambdaWrapper() .disableSubLogicDel() .selectAll(UserDO.class) @@ -562,28 +572,29 @@ class LambdaWrapperTest { @Test void testTableAlias() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " aa.id,\n" + - " aa.user_id,\n" + - " aa.area_id,\n" + - " aa.tel,\n" + - " aa.address,\n" + - " aa.del\n" + - "FROM `user` t\n" + - " LEFT JOIN address aa ON (aa.user_id = t.id)\n" + - "WHERE t.del = false\n" + - " AND aa.del = false"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + aa.id, + aa.user_id, + aa.area_id, + aa.tel, + aa.address, + aa.del + FROM `user` t + LEFT JOIN address aa ON (aa.user_id = t.id) + WHERE t.del = false + AND aa.del = false"""); MPJLambdaWrapper wrapper = new MPJLambdaWrapper() // .disableLogicDel()//关闭主表逻辑删除 .selectAll(UserDO.class) @@ -635,25 +646,26 @@ class LambdaWrapperTest { */ @Test void test3() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.address\n" + - "FROM `user` t\n" + - " LEFT JOIN address t1 ON (t.id = t1.user_id AND t.id = t1.user_id)\n" + - "WHERE t.del = false\n" + - " AND t1.del = false\n" + - " AND (t.id = ? AND (t.head_img = ? OR t1.user_id = ?) AND t.id = ?)\n" + - "LIMIT ?", + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.address + FROM `user` t + LEFT JOIN address t1 ON (t.id = t1.user_id AND t.id = t1.user_id) + WHERE t.del = false + AND t1.del = false + AND (t.id = ? AND (t.head_img = ? OR t1.user_id = ?) AND t.id = ?) + LIMIT ?""", "SELECT * FROM ( SELECT TMP.*, ROWNUM ROW_ID FROM ( SELECT t.id, t.pid, t.`name`, t.`json`, t.sex, t.head_img, " + "t.create_time, t.address_id, t.address_id2, t.del, t.create_by, t.update_by, t1.address FROM `user` t " + "LEFT JOIN address t1 ON (t.id = t1.user_id AND t.id = t1.user_id) WHERE t.del = false AND t1.del = false AND " + @@ -795,36 +807,38 @@ class LambdaWrapperTest { */ @Test void logicDelType() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.id AS joina_id,\n" + - " t1.user_id,\n" + - " t1.area_id,\n" + - " t1.tel,\n" + - " t1.address,\n" + - " t1.del AS joina_del,\n" + - " t2.id AS joinb_id,\n" + - " t2.province,\n" + - " t2.city,\n" + - " t2.area,\n" + - " t2.postcode,\n" + - " t2.del AS joinb_del\n" + - "FROM `user` t\n" + - " LEFT JOIN address t1 ON (t1.user_id = t.id AND t1.del = false)\n" + - " LEFT JOIN area t2 ON (t2.id = t1.area_id AND t2.del = false)\n" + - "WHERE t.del = false\n" + - " AND (t.id <= ?)\n" + - "ORDER BY t.id DESC\n"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.id AS joina_id, + t1.user_id, + t1.area_id, + t1.tel, + t1.address, + t1.del AS joina_del, + t2.id AS joinb_id, + t2.province, + t2.city, + t2.area, + t2.postcode, + t2.del AS joinb_del + FROM `user` t + LEFT JOIN address t1 ON (t1.user_id = t.id AND t1.del = false) + LEFT JOIN area t2 ON (t2.id = t1.area_id AND t2.del = false) + WHERE t.del = false + AND (t.id <= ?) + ORDER BY t.id DESC + """); MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .logicDelToOn() .selectAll(UserDO.class) @@ -846,36 +860,38 @@ class LambdaWrapperTest { */ @Test void joinWrapper() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.id AS joina_id,\n" + - " t1.user_id,\n" + - " t1.area_id,\n" + - " t1.tel,\n" + - " t1.address,\n" + - " t1.del AS joina_del,\n" + - " t2.id AS joinb_id,\n" + - " t2.province,\n" + - " t2.city,\n" + - " t2.area,\n" + - " t2.postcode,\n" + - " t2.del AS joinb_del\n" + - "FROM `user` t\n" + - " LEFT JOIN address t1 ON (t1.user_id = t.id AND t1.del = false)\n" + - " LEFT JOIN area t2 ON (t2.id = t1.area_id AND t2.del = false)\n" + - "WHERE t.del = false\n" + - " AND (t.id <= ?)\n" + - "ORDER BY t.id DESC\n"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.id AS joina_id, + t1.user_id, + t1.area_id, + t1.tel, + t1.address, + t1.del AS joina_del, + t2.id AS joinb_id, + t2.province, + t2.city, + t2.area, + t2.postcode, + t2.del AS joinb_del + FROM `user` t + LEFT JOIN address t1 ON (t1.user_id = t.id AND t1.del = false) + LEFT JOIN area t2 ON (t2.id = t1.area_id AND t2.del = false) + WHERE t.del = false + AND (t.id <= ?) + ORDER BY t.id DESC + """); MPJLambdaWrapper wrapper = JoinWrappers.lambda(UserDO.class) .logicDelToOn() .selectAll(UserDO.class) @@ -960,7 +976,7 @@ class LambdaWrapperTest { */ @Test void joinOrder() { - if (VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.4.3") >= 0) { + if (VersionUtils.compare(VersionUtils.getVersion(), "3.4.3") >= 0) { ThreadLocalUtils.set("SELECT id,user_id,name FROM order_t t ORDER BY t.name DESC", "SELECT t.id, t.user_id, t.name FROM order_t t ORDER BY t.name DESC", "SELECT id,user_id,name FROM order_t t ORDER BY t.name desc"); @@ -971,7 +987,7 @@ class LambdaWrapperTest { MPJLambdaWrapper wrapper = JoinWrappers.lambda(OrderDO.class); List list = wrapper.clone().list(); - if (VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.4.3") >= 0) { + if (VersionUtils.compare(VersionUtils.getVersion(), "3.4.3") >= 0) { ThreadLocalUtils.set("SELECT t.id,t.user_id,t.name,t1.`name` AS userName FROM order_t t LEFT JOIN `user` t1 ON (t1.id = t.user_id) WHERE t1.del=false ORDER BY t.name DESC", "SELECT t.id,t.user_id,t.name,t1.`name` AS userName FROM order_t t LEFT JOIN `user` t1 ON (t1.id = t.user_id) WHERE t1.del=false ORDER BY t.name desc"); } else { diff --git a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/apt/AptWrapperTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/apt/AptWrapperTest.java index 47785cf..81c8c1c 100644 --- a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/apt/AptWrapperTest.java +++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/apt/AptWrapperTest.java @@ -1,6 +1,5 @@ package com.github.yulichang.test.join.apt; -import com.baomidou.mybatisplus.core.MybatisPlusVersion; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; @@ -93,38 +92,39 @@ class AptWrapperTest { @Test void testJoin() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.id AS joina_id,\n" + - " t1.user_id,\n" + - " t1.area_id,\n" + - " t1.tel,\n" + - " t1.address,\n" + - " t1.del AS joina_del,\n" + - " t2.id AS joinb_id,\n" + - " t2.province,\n" + - " t2.city,\n" + - " t2.area,\n" + - " t2.postcode,\n" + - " t2.del AS joinb_del\n" + - "FROM `user` t\n" + - " LEFT JOIN address t1 ON (t1.user_id = t.id)\n" + - " LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" + - "WHERE t.del = false\n" + - " AND t1.del = false\n" + - " AND t2.del = false\n" + - " AND (t.id <= ?)\n" + - "ORDER BY t.id DESC"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.id AS joina_id, + t1.user_id, + t1.area_id, + t1.tel, + t1.address, + t1.del AS joina_del, + t2.id AS joinb_id, + t2.province, + t2.city, + t2.area, + t2.postcode, + t2.del AS joinb_del + FROM `user` t + LEFT JOIN address t1 ON (t1.user_id = t.id) + LEFT JOIN area t2 ON (t2.id = t1.area_id) + WHERE t.del = false + AND t1.del = false + AND t2.del = false + AND (t.id <= ?) + ORDER BY t.id DESC"""); UserDOCol u = USERDO; AddressDOCol addr = ADDRESSDO; @@ -152,25 +152,26 @@ class AptWrapperTest { @Test void testJoinField() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.id AS joina_id\n" + - "FROM `user` t\n" + - " LEFT JOIN address t1 ON (t1.user_id = t.id)\n" + - "WHERE t.del = false\n" + - " AND t1.del = false\n" + - " AND (t.id <= ?)\n" + - "ORDER BY t.id DESC"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.id AS joina_id + FROM `user` t + LEFT JOIN address t1 ON (t1.user_id = t.id) + WHERE t.del = false + AND t1.del = false + AND (t.id <= ?) + ORDER BY t.id DESC"""); UserDOCol u = USERDO; AddressDOCol addr = ADDRESSDO; @@ -192,37 +193,38 @@ class AptWrapperTest { @Test void testJoin1() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.id AS joina_id,\n" + - " t1.user_id,\n" + - " t1.area_id,\n" + - " t1.tel,\n" + - " t1.address,\n" + - " t1.del AS joina_del,\n" + - " t2.id AS joinb_id,\n" + - " t2.province,\n" + - " t2.city,\n" + - " t2.area,\n" + - " t2.postcode,\n" + - " t2.del AS joinb_del\n" + - "FROM `user` t\n" + - " LEFT JOIN address t1 ON (t1.user_id = t.id)\n" + - " LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" + - "WHERE t.del = false\n" + - " AND t1.del = false\n" + - " AND t2.del = false\n" + - "ORDER BY t.id DESC"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.id AS joina_id, + t1.user_id, + t1.area_id, + t1.tel, + t1.address, + t1.del AS joina_del, + t2.id AS joinb_id, + t2.province, + t2.city, + t2.area, + t2.postcode, + t2.del AS joinb_del + FROM `user` t + LEFT JOIN address t1 ON (t1.user_id = t.id) + LEFT JOIN area t2 ON (t2.id = t1.area_id) + WHERE t.del = false + AND t1.del = false + AND t2.del = false + ORDER BY t.id DESC"""); UserDOCol u = USERDO; AddressDOCol addr = ADDRESSDO; @@ -246,13 +248,14 @@ class AptWrapperTest { */ @Test void testWrapper() { - ThreadLocalUtils.set("SELECT t.id\n" + - "FROM `user` t\n" + - " LEFT JOIN address t1 ON (t1.user_id = t.id)\n" + - " LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" + - "WHERE t.del = false\n" + - " AND t1.del = false\n" + - " AND t2.del = false"); + ThreadLocalUtils.set(""" + SELECT t.id + FROM `user` t + LEFT JOIN address t1 ON (t1.user_id = t.id) + LEFT JOIN area t2 ON (t2.id = t1.area_id) + WHERE t.del = false + AND t1.del = false + AND t2.del = false"""); UserDOCol u = USERDO; AddressDOCol addr = ADDRESSDO; @@ -269,13 +272,14 @@ class AptWrapperTest { System.out.println(list); - ThreadLocalUtils.set("SELECT t.create_time\n" + - "FROM `user` t\n" + - " LEFT JOIN address t1 ON (t1.user_id = t.id)\n" + - " LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" + - "WHERE t.del = false\n" + - " AND t1.del = false\n" + - " AND t2.del = false"); + ThreadLocalUtils.set(""" + SELECT t.create_time + FROM `user` t + LEFT JOIN address t1 ON (t1.user_id = t.id) + LEFT JOIN area t2 ON (t2.id = t1.area_id) + WHERE t.del = false + AND t1.del = false + AND t2.del = false"""); //java.sql包下的类 AptQueryWrapper wrapper1 = new AptQueryWrapper<>(u) .select(u.createTime) @@ -290,23 +294,24 @@ class AptWrapperTest { @Test void testMSCache() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by\n" + - "FROM `user` t\n" + - "WHERE t.id = ?\n" + - " AND t.del = false\n" + - " AND (t.id <= ?)\n" + - "ORDER BY t.id ASC, t.`name` ASC"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by + FROM `user` t + WHERE t.id = ? + AND t.del = false + AND (t.id <= ?) + ORDER BY t.id ASC, t.`name` ASC"""); UserDOCol u = USERDO; AddressDOCol addr = ADDRESSDO; @@ -325,21 +330,22 @@ class AptWrapperTest { @Test void testTableAliasR() { - ThreadLocalUtils.set("SELECT tt.id,\n" + - " tt.user_id,\n" + - " tt.create_by,\n" + - " tt.update_by,\n" + - " ua.`name` AS userName,\n" + - " ub.`name` AS createName,\n" + - " uc.`name` AS updateName\n" + - "FROM user_dto tt\n" + - " LEFT JOIN `user` ua ON (ua.id = tt.user_id)\n" + - " LEFT JOIN `user` ub ON (ub.id = tt.create_by)\n" + - " LEFT JOIN `user` uc ON (uc.id = tt.update_by)\n" + - "WHERE ua.del = false\n" + - " AND ub.del = false\n" + - " AND uc.del = false\n" + - " AND (ua.id <= ? AND ub.id >= ?)"); + ThreadLocalUtils.set(""" + SELECT tt.id, + tt.user_id, + tt.create_by, + tt.update_by, + ua.`name` AS userName, + ub.`name` AS createName, + uc.`name` AS updateName + FROM user_dto tt + LEFT JOIN `user` ua ON (ua.id = tt.user_id) + LEFT JOIN `user` ub ON (ub.id = tt.create_by) + LEFT JOIN `user` uc ON (uc.id = tt.update_by) + WHERE ua.del = false + AND ub.del = false + AND uc.del = false + AND (ua.id <= ? AND ub.id >= ?)"""); UserDtoCol tt = UserDtoCol.build("tt"); UserDOCol ua = UserDOCol.build("ua"); @@ -363,29 +369,30 @@ class AptWrapperTest { assert StringUtils.isNotBlank(userDtos.get(0).getUpdateName()); - ThreadLocalUtils.set("SELECT tt.id,\n" + - " tt.pid,\n" + - " tt.`name`,\n" + - " tt.`json`,\n" + - " tt.sex,\n" + - " tt.head_img,\n" + - " tt.create_time,\n" + - " tt.address_id,\n" + - " tt.address_id2,\n" + - " tt.del,\n" + - " tt.create_by,\n" + - " tt.update_by,\n" + - " ua.id,\n" + - " ub.head_img\n" + - "FROM `user` tt\n" + - " LEFT JOIN `user` ua ON (ua.id = tt.pid)\n" + - " LEFT JOIN `user` ub ON (ub.id = tt.create_by)\n" + - " LEFT JOIN `user` uc ON (uc.id = tt.update_by)\n" + - "WHERE tt.del = false\n" + - " AND ua.del = false\n" + - " AND ub.del = false\n" + - " AND uc.del = false\n" + - " AND (ua.head_img = tt.`name` AND tt.id = ua.id)"); + ThreadLocalUtils.set(""" + SELECT tt.id, + tt.pid, + tt.`name`, + tt.`json`, + tt.sex, + tt.head_img, + tt.create_time, + tt.address_id, + tt.address_id2, + tt.del, + tt.create_by, + tt.update_by, + ua.id, + ub.head_img + FROM `user` tt + LEFT JOIN `user` ua ON (ua.id = tt.pid) + LEFT JOIN `user` ub ON (ub.id = tt.create_by) + LEFT JOIN `user` uc ON (uc.id = tt.update_by) + WHERE tt.del = false + AND ua.del = false + AND ub.del = false + AND uc.del = false + AND (ua.head_img = tt.`name` AND tt.id = ua.id)"""); UserDOCol ut = UserDOCol.build("tt"); UserDOCol ua1 = UserDOCol.build("ua"); @@ -411,34 +418,35 @@ class AptWrapperTest { */ @Test void testInner() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.id AS joina_id,\n" + - " t1.pid AS joina_pid,\n" + - " t1.`name` AS joina_name,\n" + - " t1.`json` AS joina_json,\n" + - " t1.sex AS joina_sex,\n" + - " t1.head_img AS joina_head_img,\n" + - " t1.create_time AS joina_create_time,\n" + - " t1.address_id AS joina_address_id,\n" + - " t1.address_id2 AS joina_address_id2,\n" + - " t1.del AS joina_del,\n" + - " t1.create_by AS joina_create_by,\n" + - " t1.update_by AS joina_update_by\n" + - "FROM `user` t\n" + - " LEFT JOIN `user` t1 ON (t1.pid = t.id)\n" + - "WHERE t.del = false\n" + - " AND (t.id > ?)"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.id AS joina_id, + t1.pid AS joina_pid, + t1.`name` AS joina_name, + t1.`json` AS joina_json, + t1.sex AS joina_sex, + t1.head_img AS joina_head_img, + t1.create_time AS joina_create_time, + t1.address_id AS joina_address_id, + t1.address_id2 AS joina_address_id2, + t1.del AS joina_del, + t1.create_by AS joina_create_by, + t1.update_by AS joina_update_by + FROM `user` t + LEFT JOIN `user` t1 ON (t1.pid = t.id) + WHERE t.del = false + AND (t.id > ?)"""); UserDOCol u = USERDO; UserDOCol ua = UserDOCol.build(); @@ -453,24 +461,25 @@ class AptWrapperTest { List list = userMapper.selectJoinList(UserDO.class, wrapper); System.out.println(list); - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.`name` AS createName,\n" + - " t2.`name` AS updateName\n" + - "FROM `user` t\n" + - " LEFT JOIN `user` t1 ON (t1.id = t.create_by)\n" + - " LEFT JOIN `user` t2 ON (t2.id = t.update_by)\n" + - "WHERE (t2.id = t.update_by AND t.id = t1.id)"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.`name` AS createName, + t2.`name` AS updateName + FROM `user` t + LEFT JOIN `user` t1 ON (t1.id = t.create_by) + LEFT JOIN `user` t2 ON (t2.id = t.update_by) + WHERE (t2.id = t.update_by AND t.id = t1.id)"""); UserDOCol uu = UserDOCol.build(); UserDOCol uua = UserDOCol.build(); @@ -491,48 +500,49 @@ class AptWrapperTest { assert dos.get(0).getCreateName() != null && dos.get(0).getUpdateName() != null; - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.`name` AS alias,\n" + - " t1.id AS joina_id,\n" + - " t1.pid AS joina_pid,\n" + - " t1.`name` AS joina_name,\n" + - " t1.`json` AS joina_json,\n" + - " t1.sex AS joina_sex,\n" + - " t1.head_img AS joina_head_img,\n" + - " t1.create_time AS joina_create_time,\n" + - " t1.address_id AS joina_address_id,\n" + - " t1.address_id2 AS joina_address_id2,\n" + - " t1.del AS joina_del,\n" + - " t1.create_by AS joina_create_by,\n" + - " t1.update_by AS joina_update_by,\n" + - " t2.id AS joinb_id,\n" + - " t2.pid AS joinb_pid,\n" + - " t2.`name` AS joinb_name,\n" + - " t2.`json` AS joinb_json,\n" + - " t2.sex AS joinb_sex,\n" + - " t2.head_img AS joinb_head_img,\n" + - " t2.create_time AS joinb_create_time,\n" + - " t2.address_id AS joinb_address_id,\n" + - " t2.address_id2 AS joinb_address_id2,\n" + - " t2.del AS joinb_del,\n" + - " t2.create_by AS joinb_create_by,\n" + - " t2.update_by AS joinb_update_by\n" + - "FROM `user` t\n" + - " LEFT JOIN `user` t1 ON (t1.pid = t.id)\n" + - " LEFT JOIN `user` t2 ON (t2.pid = t1.id)\n" + - "WHERE t.del = false\n" + - " AND (t1.id <= ? AND t.id <= ?)"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.`name` AS alias, + t1.id AS joina_id, + t1.pid AS joina_pid, + t1.`name` AS joina_name, + t1.`json` AS joina_json, + t1.sex AS joina_sex, + t1.head_img AS joina_head_img, + t1.create_time AS joina_create_time, + t1.address_id AS joina_address_id, + t1.address_id2 AS joina_address_id2, + t1.del AS joina_del, + t1.create_by AS joina_create_by, + t1.update_by AS joina_update_by, + t2.id AS joinb_id, + t2.pid AS joinb_pid, + t2.`name` AS joinb_name, + t2.`json` AS joinb_json, + t2.sex AS joinb_sex, + t2.head_img AS joinb_head_img, + t2.create_time AS joinb_create_time, + t2.address_id AS joinb_address_id, + t2.address_id2 AS joinb_address_id2, + t2.del AS joinb_del, + t2.create_by AS joinb_create_by, + t2.update_by AS joinb_update_by + FROM `user` t + LEFT JOIN `user` t1 ON (t1.pid = t.id) + LEFT JOIN `user` t2 ON (t2.pid = t1.id) + WHERE t.del = false + AND (t1.id <= ? AND t.id <= ?)"""); UserDOCol uuu = UserDOCol.build(); UserDOCol uuua = UserDOCol.build(); @@ -628,28 +638,29 @@ class AptWrapperTest { @Test void testTableAlias() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " aa.id,\n" + - " aa.user_id,\n" + - " aa.area_id,\n" + - " aa.tel,\n" + - " aa.address,\n" + - " aa.del\n" + - "FROM `user` t\n" + - " LEFT JOIN address aa ON (aa.user_id = t.id)\n" + - "WHERE t.del = false\n" + - " AND aa.del = false"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + aa.id, + aa.user_id, + aa.area_id, + aa.tel, + aa.address, + aa.del + FROM `user` t + LEFT JOIN address aa ON (aa.user_id = t.id) + WHERE t.del = false + AND aa.del = false"""); UserDOCol u = UserDOCol.build(); AddressDOCol addr = AddressDOCol.build("aa"); @@ -711,25 +722,26 @@ class AptWrapperTest { */ @Test void test3() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.address\n" + - "FROM `user` t\n" + - " LEFT JOIN address t1 ON (t.id = t1.user_id AND t.id = t1.user_id)\n" + - "WHERE t.del = false\n" + - " AND t1.del = false\n" + - " AND (t.id = ? AND (t.head_img = ? OR t1.user_id = ?) AND t.id = ?)\n" + - "LIMIT ?", + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.address + FROM `user` t + LEFT JOIN address t1 ON (t.id = t1.user_id AND t.id = t1.user_id) + WHERE t.del = false + AND t1.del = false + AND (t.id = ? AND (t.head_img = ? OR t1.user_id = ?) AND t.id = ?) + LIMIT ?""", "SELECT * FROM ( SELECT TMP.*, ROWNUM ROW_ID FROM ( SELECT t.id, t.pid, t.`name`, t.`json`, t.sex, t.head_img, " + "t.create_time, t.address_id, t.address_id2, t.del, t.create_by, t.update_by, t1.address FROM `user` t " + "LEFT JOIN address t1 ON (t.id = t1.user_id AND t.id = t1.user_id) WHERE t.del = false AND t1.del = false AND " + @@ -895,36 +907,38 @@ class AptWrapperTest { */ @Test void logicDelType() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.id AS joina_id,\n" + - " t1.user_id,\n" + - " t1.area_id,\n" + - " t1.tel,\n" + - " t1.address,\n" + - " t1.del AS joina_del,\n" + - " t2.id AS joinb_id,\n" + - " t2.province,\n" + - " t2.city,\n" + - " t2.area,\n" + - " t2.postcode,\n" + - " t2.del AS joinb_del\n" + - "FROM `user` t\n" + - " LEFT JOIN address t1 ON (t1.user_id = t.id AND t1.del = false)\n" + - " LEFT JOIN area t2 ON (t2.id = t1.area_id AND t2.del = false)\n" + - "WHERE t.del = false\n" + - " AND (t.id <= ?)\n" + - "ORDER BY t.id DESC\n"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.id AS joina_id, + t1.user_id, + t1.area_id, + t1.tel, + t1.address, + t1.del AS joina_del, + t2.id AS joinb_id, + t2.province, + t2.city, + t2.area, + t2.postcode, + t2.del AS joinb_del + FROM `user` t + LEFT JOIN address t1 ON (t1.user_id = t.id AND t1.del = false) + LEFT JOIN area t2 ON (t2.id = t1.area_id AND t2.del = false) + WHERE t.del = false + AND (t.id <= ?) + ORDER BY t.id DESC + """); UserDOCol u = UserDOCol.build(); AddressDOCol addr = AddressDOCol.build(); AreaDOCol ar = AreaDOCol.build(); @@ -948,36 +962,38 @@ class AptWrapperTest { */ @Test void joinWrapper() { - ThreadLocalUtils.set("SELECT t.id,\n" + - " t.pid,\n" + - " t.`name`,\n" + - " t.`json`,\n" + - " t.sex,\n" + - " t.head_img,\n" + - " t.create_time,\n" + - " t.address_id,\n" + - " t.address_id2,\n" + - " t.del,\n" + - " t.create_by,\n" + - " t.update_by,\n" + - " t1.id AS joina_id,\n" + - " t1.user_id,\n" + - " t1.area_id,\n" + - " t1.tel,\n" + - " t1.address,\n" + - " t1.del AS joina_del,\n" + - " t2.id AS joinb_id,\n" + - " t2.province,\n" + - " t2.city,\n" + - " t2.area,\n" + - " t2.postcode,\n" + - " t2.del AS joinb_del\n" + - "FROM `user` t\n" + - " LEFT JOIN address t1 ON (t1.user_id = t.id AND t1.del = false)\n" + - " LEFT JOIN area t2 ON (t2.id = t1.area_id AND t2.del = false)\n" + - "WHERE t.del = false\n" + - " AND (t.id <= ?)\n" + - "ORDER BY t.id DESC\n"); + ThreadLocalUtils.set(""" + SELECT t.id, + t.pid, + t.`name`, + t.`json`, + t.sex, + t.head_img, + t.create_time, + t.address_id, + t.address_id2, + t.del, + t.create_by, + t.update_by, + t1.id AS joina_id, + t1.user_id, + t1.area_id, + t1.tel, + t1.address, + t1.del AS joina_del, + t2.id AS joinb_id, + t2.province, + t2.city, + t2.area, + t2.postcode, + t2.del AS joinb_del + FROM `user` t + LEFT JOIN address t1 ON (t1.user_id = t.id AND t1.del = false) + LEFT JOIN area t2 ON (t2.id = t1.area_id AND t2.del = false) + WHERE t.del = false + AND (t.id <= ?) + ORDER BY t.id DESC + """); UserDOCol u = UserDOCol.build(); AddressDOCol addr = AddressDOCol.build(); AreaDOCol ar = AreaDOCol.build(); @@ -1077,7 +1093,7 @@ class AptWrapperTest { */ @Test void joinOrder() { - if (VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.4.3") >= 0) { + if (VersionUtils.compare(VersionUtils.getVersion(), "3.4.3") >= 0) { ThreadLocalUtils.set("SELECT id,user_id,name FROM order_t t ORDER BY t.name DESC", "SELECT t.id, t.user_id, t.name FROM order_t t ORDER BY t.name DESC", "SELECT id,user_id,name FROM order_t t ORDER BY t.name desc"); @@ -1089,7 +1105,7 @@ class AptWrapperTest { AptQueryWrapper wrapper = AptWrappers.query(o); List list = wrapper.list(); - if (VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.4.3") >= 0) { + if (VersionUtils.compare(VersionUtils.getVersion(), "3.4.3") >= 0) { ThreadLocalUtils.set("SELECT t.id,t.user_id,t.name,t1.`name` AS userName FROM order_t t LEFT JOIN `user` t1 ON (t1.id = t.user_id) WHERE t1.del=false ORDER BY t.name DESC", "SELECT t.id,t.user_id,t.name,t1.`name` AS userName FROM order_t t LEFT JOIN `user` t1 ON (t1.id = t.user_id) WHERE t1.del=false ORDER BY t.name desc"); } else {