From 14d7e954b0dcf6b65a2861285e2708d8187ca16b Mon Sep 17 00:00:00 2001 From: yulichang <570810310@qq.com> Date: Mon, 8 May 2023 13:49:12 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=BB=93=E6=9E=84=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mybatis-plus-join-boot-starter/pom.xml | 2 +- .../MybatisPlusJoinAutoConfiguration.java | 5 +- .../github/yulichang/base/MPJBaseMapper.java | 91 ++++++++++++++++- .../github/yulichang/base/MPJBaseService.java | 91 ++++++++++++++++- .../yulichang/base/mapper/MPJJoinMapper.java | 99 ------------------- .../base/mapper/MPJRelationMapper.java | 87 ---------------- .../base/service/MPJJoinService.java | 66 ------------- .../base/service/MPJRelationService.java | 46 --------- .../yulichang/injector/MPJSqlInjector.java | 2 +- .../yulichang/interceptor/MPJInterceptor.java | 2 +- .../github/yulichang/method/mp/Delete.java | 3 +- .../yulichang/method/mp/SelectCount.java | 3 +- .../yulichang/method/mp/SelectList.java | 3 +- .../yulichang/method/mp/SelectMaps.java | 3 +- .../yulichang/method/mp/SelectMapsPage.java | 3 +- .../yulichang/method/mp/SelectObjs.java | 3 +- .../github/yulichang/method/mp/SelectOne.java | 3 +- .../yulichang/method/mp/SelectPage.java | 3 +- .../yulichang/method/mp/TableAlias.java | 31 ++++++ .../github/yulichang/method/mp/Update.java | 3 +- .../yulichang/toolkit/JoinWrappers.java | 2 +- .../MPJTableMapperHelper.java | 2 +- .../yulichang/toolkit/SpringContentUtils.java | 1 - mybatis-plus-join-extension/pom.xml | 64 ++++++++++++ .../mapping/base}/MPJDeepMapper.java | 94 ++---------------- .../mapping}/base/service/MPJDeepService.java | 4 +- .../mapping}/config/MappingConfig.java | 6 +- .../mapping}/mapper/MPJMappingWrapper.java | 2 +- .../mapping}/mapper/MPJTableFieldInfo.java | 3 +- .../mapping}/mapper/MPJTableInfo.java | 2 +- .../mapping/mapper}/MPJTableInfoHelper.java | 39 +------- .../extension/mapping}/relation/Relation.java | 10 +- .../mapping}/wrapper/MappingQuery.java | 6 +- .../test/join/mapper/MyBaseMapper.java | 2 +- pom.xml | 1 + 35 files changed, 316 insertions(+), 471 deletions(-) delete mode 100644 mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper/MPJJoinMapper.java delete mode 100644 mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper/MPJRelationMapper.java delete mode 100644 mybatis-plus-join-core/src/main/java/com/github/yulichang/base/service/MPJJoinService.java delete mode 100644 mybatis-plus-join-core/src/main/java/com/github/yulichang/base/service/MPJRelationService.java rename mybatis-plus-join-core/src/main/java/com/github/yulichang/{mapper => toolkit}/MPJTableMapperHelper.java (95%) create mode 100644 mybatis-plus-join-extension/pom.xml rename {mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper => mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/base}/MPJDeepMapper.java (81%) rename {mybatis-plus-join-core/src/main/java/com/github/yulichang => mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping}/base/service/MPJDeepService.java (99%) rename {mybatis-plus-join-core/src/main/java/com/github/yulichang => mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping}/config/MappingConfig.java (66%) rename {mybatis-plus-join-core/src/main/java/com/github/yulichang => mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping}/mapper/MPJMappingWrapper.java (98%) rename {mybatis-plus-join-core/src/main/java/com/github/yulichang => mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping}/mapper/MPJTableFieldInfo.java (99%) rename {mybatis-plus-join-core/src/main/java/com/github/yulichang => mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping}/mapper/MPJTableInfo.java (95%) rename {mybatis-plus-join-core/src/main/java/com/baomidou/mybatisplus/core/metadata => mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/mapper}/MPJTableInfoHelper.java (70%) rename {mybatis-plus-join-core/src/main/java/com/github/yulichang => mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping}/relation/Relation.java (92%) rename {mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper => mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping}/wrapper/MappingQuery.java (93%) diff --git a/mybatis-plus-join-boot-starter/pom.xml b/mybatis-plus-join-boot-starter/pom.xml index 3254a29..88c3156 100644 --- a/mybatis-plus-join-boot-starter/pom.xml +++ b/mybatis-plus-join-boot-starter/pom.xml @@ -46,7 +46,7 @@ com.github.yulichang - mybatis-plus-join-core + mybatis-plus-join-extension 1.4.4.1 diff --git a/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinAutoConfiguration.java b/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinAutoConfiguration.java index bc6687a..6295123 100644 --- a/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinAutoConfiguration.java +++ b/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinAutoConfiguration.java @@ -6,9 +6,10 @@ import com.github.yulichang.autoconfigure.conditional.MPJSqlInjectorCondition; import com.github.yulichang.config.ConfigProperties; import com.github.yulichang.config.MPJInterceptorConfig; import com.github.yulichang.config.enums.LogicDelTypeEnum; +import com.github.yulichang.extension.mapping.config.MappingConfig; +import com.github.yulichang.toolkit.SpringContentUtils; import com.github.yulichang.injector.MPJSqlInjector; import com.github.yulichang.interceptor.MPJInterceptor; -import com.github.yulichang.toolkit.SpringContentUtils; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.slf4j.Logger; @@ -127,7 +128,7 @@ public class MybatisPlusJoinAutoConfiguration { @Override @SuppressWarnings("NullableProblems") public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) { - new com.github.yulichang.config.MappingConfig(); + new MappingConfig(); } } 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 2c5f8a6..b38c5e3 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,14 +1,99 @@ package com.github.yulichang.base; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.github.yulichang.base.mapper.MPJJoinMapper; -import com.github.yulichang.base.mapper.MPJRelationMapper; +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 MPJJoinMapper, MPJRelationMapper { +public interface MPJBaseMapper extends BaseMapper { + /** + * 根据 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 + * @param clazz resultType + */ + DTO selectJoinOne(@Param(Constant.CLAZZ) Class clazz, + @Param(Constants.WRAPPER) MPJBaseJoin wrapper); + + /** + * 连表查询返回Map + * + * @param wrapper joinWrapper + */ + Map selectJoinMap(@Param(Constants.WRAPPER) MPJBaseJoin wrapper); + + /** + * 连表查询返回记录集合 + * + * @param wrapper joinWrapper + * @param clazz resultType + */ + List selectJoinList(@Param(Constant.CLAZZ) Class clazz, + @Param(Constants.WRAPPER) MPJBaseJoin wrapper); + + /** + * 连表查询返回Map集合 + * + * @param wrapper joinWrapper + */ + List> selectJoinMaps(@Param(Constants.WRAPPER) MPJBaseJoin 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 + */ +

>> P selectJoinMapsPage(P page, + @Param(Constants.WRAPPER) MPJBaseJoin 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 f459202..b7ebe5a 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,13 +1,98 @@ package com.github.yulichang.base; -import com.github.yulichang.base.service.MPJJoinService; +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 * 目前包含两个模块 连表查询 和 关系映射 * * @author yulichang - * @see MPJJoinService */ -public interface MPJBaseService extends MPJJoinService { +@SuppressWarnings({"unused", "unchecked"}) +public interface MPJBaseService extends IService { + + + /** + * 根据 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/base/mapper/MPJJoinMapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper/MPJJoinMapper.java deleted file mode 100644 index 9a59afe..0000000 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper/MPJJoinMapper.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.github.yulichang.base.mapper; - -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 MPJJoinMapper extends BaseMapper { - - /** - * 根据 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 - * @param clazz resultType - */ - DTO selectJoinOne(@Param(Constant.CLAZZ) Class clazz, - @Param(Constants.WRAPPER) MPJBaseJoin wrapper); - - /** - * 连表查询返回Map - * - * @param wrapper joinWrapper - */ - Map selectJoinMap(@Param(Constants.WRAPPER) MPJBaseJoin wrapper); - - /** - * 连表查询返回记录集合 - * - * @param wrapper joinWrapper - * @param clazz resultType - */ - List selectJoinList(@Param(Constant.CLAZZ) Class clazz, - @Param(Constants.WRAPPER) MPJBaseJoin wrapper); - - /** - * 连表查询返回Map集合 - * - * @param wrapper joinWrapper - */ - List> selectJoinMaps(@Param(Constants.WRAPPER) MPJBaseJoin 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 - */ -

>> P selectJoinMapsPage(P page, - @Param(Constants.WRAPPER) MPJBaseJoin wrapper); -} diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper/MPJRelationMapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper/MPJRelationMapper.java deleted file mode 100644 index 03b8222..0000000 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper/MPJRelationMapper.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.github.yulichang.base.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils; -import com.baomidou.mybatisplus.core.toolkit.support.SFunction; -import com.github.yulichang.relation.Relation; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.function.Function; - -/** - * 注解映射Mapper 用于替代 MPJDeepMapper - * - * @author yulichang - * @since 1.4.3 - */ -public interface MPJRelationMapper { - - /** - * 通过注解实现单表多次查询 - * - * @param function BaseMapper调用方法 - * @see com.github.yulichang.annotation.EntityMapping - * @see com.github.yulichang.annotation.FieldMapping - */ - default > R selectRelation(Function function) { - return selectRelation(function, new ArrayList<>()); - } - - /** - * 通过注解实现单表多次查询 - * - * @param function BaseMapper调用方法 - * @param list 属性过滤, 可以只查询需要映射的属性 - * @see com.github.yulichang.annotation.EntityMapping - * @see com.github.yulichang.annotation.FieldMapping - */ - @SuppressWarnings("unchecked") - default > R selectRelation(Function function, List> list) { - R r = function.apply((M) this); - if (Objects.isNull(r)) { - return null; - } else if (r instanceof List) { - List data = (List) r; - if (CollectionUtils.isEmpty(data)) { - return r; - } else { - T t = data.get(0); - if (Map.class.isAssignableFrom(t.getClass())) { - throw ExceptionUtils.mpe("暂不支持Map类型映射"); - } - if (Object.class == t.getClass()) { - return r; - } - return (R) Relation.list(data, list); - } - } else if (r instanceof IPage) { - IPage data = (IPage) r; - if (!CollectionUtils.isEmpty(data.getRecords())) { - T t = data.getRecords().get(0); - if (Map.class.isAssignableFrom(t.getClass())) { - throw ExceptionUtils.mpe("暂不支持Map类型映射"); - } - if (Object.class == t.getClass()) { - return r; - } - Relation.list(data.getRecords(), list); - } - return r; - } else if (r instanceof Integer) { - return r; - } else if (r instanceof Long) { - return r; - } else if (r instanceof Boolean) { - return r; - } else if (Object.class == r.getClass()) { - return r; - } else { - return (R) Relation.one((T) r, list); - } - } -} diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/service/MPJJoinService.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/service/MPJJoinService.java deleted file mode 100644 index 08e8d9d..0000000 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/service/MPJJoinService.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.github.yulichang.base.service; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; -import com.github.yulichang.base.MPJBaseMapper; -import com.github.yulichang.interfaces.MPJBaseJoin; - -import java.util.List; -import java.util.Map; - -/** - * @author yulichang - * @see IService - */ -@SuppressWarnings("unused") -public interface MPJJoinService extends IService { - - /** - * 根据 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/base/service/MPJRelationService.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/service/MPJRelationService.java deleted file mode 100644 index 55caeeb..0000000 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/service/MPJRelationService.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.github.yulichang.base.service; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.toolkit.support.SFunction; -import com.baomidou.mybatisplus.extension.service.IService; -import com.github.yulichang.annotation.EntityMapping; -import com.github.yulichang.annotation.FieldMapping; -import com.github.yulichang.base.mapper.MPJRelationMapper; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Function; - -/** - * 深度查询 - *

- * 对配置了映射注解的字段进行查询 - * 目前查询深度只支持2级(只解析当前实体类的映射注解,不会对查询结果再次解析注解) - * 多级查询可能存在循环引用的问题,也可能会导致全量查询 - * 用于替换deep - * - * @author yulichang - * @see EntityMapping - * @see FieldMapping - * @since 1.4.4 - */ -@SuppressWarnings({"unused"}) -public interface MPJRelationService extends IService { - - default > R selectRelation(Function function) { - return selectRelation(function, new ArrayList<>()); - } - - /** - * 通过注解实现单表多次查询 - * - * @param function BaseMapper调用方法 - * @param list 属性过滤, 可以只查询需要映射的属性 - * @see com.github.yulichang.annotation.EntityMapping - * @see com.github.yulichang.annotation.FieldMapping - */ - default > R selectRelation(Function function, List> list) { - return ((MPJRelationMapper) getBaseMapper()).selectRelation(function, list); - } - -} 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 92d51bf..8bd84a2 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 @@ -12,8 +12,8 @@ import com.baomidou.mybatisplus.core.toolkit.ArrayUtils; import com.baomidou.mybatisplus.core.toolkit.ClassUtils; import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils; import com.github.yulichang.adapter.v3431.AbstractMethodV3431; -import com.github.yulichang.mapper.MPJTableMapperHelper; import com.github.yulichang.method.*; +import com.github.yulichang.toolkit.MPJTableMapperHelper; import com.github.yulichang.toolkit.TableHelper; import com.github.yulichang.toolkit.VersionUtils; import com.github.yulichang.toolkit.reflect.GenericTypeUtils; 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 88d6bd9..88ea64b 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 @@ -3,11 +3,11 @@ package com.github.yulichang.interceptor; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.*; import com.github.yulichang.config.ConfigProperties; -import com.github.yulichang.mapper.MPJTableMapperHelper; import com.github.yulichang.method.MPJResultType; import com.github.yulichang.query.MPJQueryWrapper; import com.github.yulichang.toolkit.Constant; import com.github.yulichang.toolkit.MPJReflectionKit; +import com.github.yulichang.toolkit.MPJTableMapperHelper; import com.github.yulichang.toolkit.TableHelper; import com.github.yulichang.toolkit.support.FieldCache; import com.github.yulichang.wrapper.MPJLambdaWrapper; diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/Delete.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/Delete.java index 5855f05..ff6aaf1 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/Delete.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/Delete.java @@ -1,6 +1,5 @@ package com.github.yulichang.method.mp; -import com.baomidou.mybatisplus.core.metadata.MPJTableInfoHelper; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils; @@ -24,7 +23,7 @@ public class Delete extends com.baomidou.mybatisplus.core.injector.methods.Delet @Override public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { return super.injectMappedStatement(mapperClass, modelClass, - MPJTableInfoHelper.copyAndSetTableName(tableInfo, getTableName(tableInfo))); + copyAndSetTableName(tableInfo, getTableName(tableInfo))); } @Override diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectCount.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectCount.java index e33eb38..379dd5f 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectCount.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectCount.java @@ -1,6 +1,5 @@ package com.github.yulichang.method.mp; -import com.baomidou.mybatisplus.core.metadata.MPJTableInfoHelper; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils; @@ -24,7 +23,7 @@ public class SelectCount extends com.baomidou.mybatisplus.core.injector.methods. @Override public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { return super.injectMappedStatement(mapperClass, modelClass, - MPJTableInfoHelper.copyAndSetTableName(tableInfo, getTableName(tableInfo))); + copyAndSetTableName(tableInfo, getTableName(tableInfo))); } @Override diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectList.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectList.java index 41af30d..fb6cc63 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectList.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectList.java @@ -1,6 +1,5 @@ package com.github.yulichang.method.mp; -import com.baomidou.mybatisplus.core.metadata.MPJTableInfoHelper; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.StringPool; @@ -25,7 +24,7 @@ public class SelectList extends com.baomidou.mybatisplus.core.injector.methods.S @Override public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { return super.injectMappedStatement(mapperClass, modelClass, - MPJTableInfoHelper.copyAndSetTableName(tableInfo, getTableName(tableInfo))); + copyAndSetTableName(tableInfo, getTableName(tableInfo))); } @Override diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectMaps.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectMaps.java index 3f5f8d3..2485317 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectMaps.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectMaps.java @@ -1,6 +1,5 @@ package com.github.yulichang.method.mp; -import com.baomidou.mybatisplus.core.metadata.MPJTableInfoHelper; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.StringPool; @@ -25,7 +24,7 @@ public class SelectMaps extends com.baomidou.mybatisplus.core.injector.methods.S @Override public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { return super.injectMappedStatement(mapperClass, modelClass, - MPJTableInfoHelper.copyAndSetTableName(tableInfo, getTableName(tableInfo))); + copyAndSetTableName(tableInfo, getTableName(tableInfo))); } @Override diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectMapsPage.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectMapsPage.java index 76e8127..41e08a2 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectMapsPage.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectMapsPage.java @@ -1,6 +1,5 @@ package com.github.yulichang.method.mp; -import com.baomidou.mybatisplus.core.metadata.MPJTableInfoHelper; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.StringPool; @@ -25,7 +24,7 @@ public class SelectMapsPage extends com.baomidou.mybatisplus.core.injector.metho @Override public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { return super.injectMappedStatement(mapperClass, modelClass, - MPJTableInfoHelper.copyAndSetTableName(tableInfo, getTableName(tableInfo))); + copyAndSetTableName(tableInfo, getTableName(tableInfo))); } @Override diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectObjs.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectObjs.java index 81d5a35..d6543a8 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectObjs.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectObjs.java @@ -1,6 +1,5 @@ package com.github.yulichang.method.mp; -import com.baomidou.mybatisplus.core.metadata.MPJTableInfoHelper; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.StringPool; @@ -25,7 +24,7 @@ public class SelectObjs extends com.baomidou.mybatisplus.core.injector.methods.S @Override public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { return super.injectMappedStatement(mapperClass, modelClass, - MPJTableInfoHelper.copyAndSetTableName(tableInfo, getTableName(tableInfo))); + copyAndSetTableName(tableInfo, getTableName(tableInfo))); } @Override diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectOne.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectOne.java index f6023c9..4d3f74f 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectOne.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectOne.java @@ -1,6 +1,5 @@ package com.github.yulichang.method.mp; -import com.baomidou.mybatisplus.core.metadata.MPJTableInfoHelper; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.StringPool; @@ -30,7 +29,7 @@ public class SelectOne extends com.baomidou.mybatisplus.core.injector.methods.Se @Override public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { return super.injectMappedStatement(mapperClass, modelClass, - MPJTableInfoHelper.copyAndSetTableName(tableInfo, getTableName(tableInfo))); + copyAndSetTableName(tableInfo, getTableName(tableInfo))); } @Override diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectPage.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectPage.java index 9ad5a05..371cb68 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectPage.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectPage.java @@ -1,6 +1,5 @@ package com.github.yulichang.method.mp; -import com.baomidou.mybatisplus.core.metadata.MPJTableInfoHelper; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.StringPool; @@ -25,7 +24,7 @@ public class SelectPage extends com.baomidou.mybatisplus.core.injector.methods.S @Override public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { return super.injectMappedStatement(mapperClass, modelClass, - MPJTableInfoHelper.copyAndSetTableName(tableInfo, getTableName(tableInfo))); + copyAndSetTableName(tableInfo, getTableName(tableInfo))); } @Override diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/TableAlias.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/TableAlias.java index d69bdea..f1a48d9 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/TableAlias.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/TableAlias.java @@ -2,9 +2,13 @@ package com.github.yulichang.method.mp; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils; import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils; import com.github.yulichang.interfaces.MPJBaseJoin; import com.github.yulichang.method.MPJBaseMethod; +import org.apache.ibatis.session.Configuration; + +import java.lang.reflect.Field; /** * 兼容原生方法 @@ -22,4 +26,31 @@ public interface TableAlias extends Constants, MPJBaseMethod { mpjTableName(tableInfo) + " ${ew.alias} " + NEWLINE + from, tableInfo.getTableName()); return SPACE + alias; } + + /** + * 复制tableInfo对象 + * 由于各个版本的MP的TableInfo对象存在差异,为了兼容性采用反射,而不是getter setter + */ + default TableInfo copyAndSetTableName(TableInfo tableInfo, String tableName) { + try { + TableInfo table; + try { + table = TableInfo.class.getDeclaredConstructor(Class.class).newInstance(tableInfo.getEntityType()); + } catch (Exception e) { + table = TableInfo.class.getDeclaredConstructor(Configuration.class, Class.class).newInstance(tableInfo.getConfiguration(), tableInfo.getEntityType()); + } + //反射拷贝对象 + Field[] fields = TableInfo.class.getDeclaredFields(); + for (Field f : fields) { + f.setAccessible(true); + f.set(table, f.get(tableInfo)); + } + Field field = TableInfo.class.getDeclaredField("tableName"); + field.setAccessible(true); + field.set(table, tableName); + return table; + } catch (Exception e) { + throw ExceptionUtils.mpe("TableInfo 对象拷贝失败 -> " + tableInfo.getEntityType().getName()); + } + } } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/Update.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/Update.java index 1c36e3c..3d925db 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/Update.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/Update.java @@ -1,6 +1,5 @@ package com.github.yulichang.method.mp; -import com.baomidou.mybatisplus.core.metadata.MPJTableInfoHelper; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils; @@ -24,7 +23,7 @@ public class Update extends com.baomidou.mybatisplus.core.injector.methods.Updat @Override public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { return super.injectMappedStatement(mapperClass, modelClass, - MPJTableInfoHelper.copyAndSetTableName(tableInfo, getTableName(tableInfo))); + copyAndSetTableName(tableInfo, getTableName(tableInfo))); } @Override diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/JoinWrappers.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/JoinWrappers.java index 5ed7ff1..b2eac1e 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/JoinWrappers.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/JoinWrappers.java @@ -83,7 +83,7 @@ public class JoinWrappers { } /** - * JoinWrappers.delete(User.class) + * JoinWrappers.delete("t", User.class) */ public static DeleteJoinWrapper delete(String alias, Class clazz) { return new DeleteJoinWrapper<>(clazz, alias); diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/mapper/MPJTableMapperHelper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/MPJTableMapperHelper.java similarity index 95% rename from mybatis-plus-join-core/src/main/java/com/github/yulichang/mapper/MPJTableMapperHelper.java rename to mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/MPJTableMapperHelper.java index f87a2f6..ff75b22 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/mapper/MPJTableMapperHelper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/MPJTableMapperHelper.java @@ -1,4 +1,4 @@ -package com.github.yulichang.mapper; +package com.github.yulichang.toolkit; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/SpringContentUtils.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/SpringContentUtils.java index 0a58de1..64b366d 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/SpringContentUtils.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/SpringContentUtils.java @@ -4,7 +4,6 @@ package com.github.yulichang.toolkit; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.toolkit.Assert; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; -import com.github.yulichang.mapper.MPJTableMapperHelper; import org.apache.ibatis.session.SqlSession; import java.util.Objects; diff --git a/mybatis-plus-join-extension/pom.xml b/mybatis-plus-join-extension/pom.xml new file mode 100644 index 0000000..d37ba52 --- /dev/null +++ b/mybatis-plus-join-extension/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + com.github.yulichang + mybatis-plus-join-root + 1.4.4.1 + + mybatis-plus-join-extension + 1.4.4.1 + mybatis-plus-join-extension + + An enhanced toolkit of Mybatis-Plus to simplify development. + https://github.com/yulichang/mybatis-plus-join + + + The Apache License, Version 2.0 + https://www.apache.org/licenses/LICENSE-2.0.txt + + + + + mybatis-plus-join + yulichang + yu_lichang@qq.com + + + + scm:git:https://github.com/yulichang/mybatis-plus-join.git + scm:git:https://github.com/yulichang/mybatis-plus-join.git + https://github.com/yulichang/mybatis-plus-join + + + + 1.8 + 1.8 + 1.8 + 1.8 + github + UTF-8 + + + + + com.github.yulichang + mybatis-plus-join-core + 1.4.4.1 + + + com.baomidou + mybatis-plus-extension + 3.5.3.1 + provided + + + org.projectlombok + lombok + 1.18.24 + provided + + + diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper/MPJDeepMapper.java b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/base/MPJDeepMapper.java similarity index 81% rename from mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper/MPJDeepMapper.java rename to mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/base/MPJDeepMapper.java index 95ebdc8..a6321f6 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper/MPJDeepMapper.java +++ b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/base/MPJDeepMapper.java @@ -1,14 +1,15 @@ -package com.github.yulichang.base.mapper; +package com.github.yulichang.extension.mapping.base; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.enums.SqlKeyword; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.*; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.yulichang.extension.mapping.mapper.MPJTableInfoHelper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; -import com.github.yulichang.base.mapper.wrapper.MappingQuery; -import com.github.yulichang.mapper.MPJTableFieldInfo; -import com.github.yulichang.mapper.MPJTableInfo; +import com.github.yulichang.extension.mapping.mapper.MPJTableFieldInfo; +import com.github.yulichang.extension.mapping.mapper.MPJTableInfo; +import com.github.yulichang.extension.mapping.wrapper.MappingQuery; import com.github.yulichang.toolkit.LambdaUtils; import java.io.Serializable; @@ -194,41 +195,6 @@ public interface MPJDeepMapper extends BaseMapper { return mpjQueryMapping(selectList(queryWrapper), property); } - /** - * 根据 Wrapper 条件,查询全部记录 - * - * @param queryWrapper 实体对象封装操作类(可以为 null) - */ - default List> selectMapsDeep(Class clazz, Wrapper queryWrapper) { - return mpjQueryMapMapping(selectMaps(queryWrapper), clazz, null); - } - - /** - * 根据 entity 条件,查询全部记录(并翻页) - *

- * JDK 默认不推荐泛型数组,会引起 Java堆污染(Heap Pollution) - * - * @param clazz 实体类class - * @param queryWrapper 实体对象封装操作类(可以为 null) - * @param property 需要关联的字段 - */ - default List> selectMapsDeep(Class clazz, Wrapper queryWrapper, SFunction... property) { - return mpjQueryMapMapping(selectMaps(queryWrapper), clazz, Arrays.asList(property)); - } - - /** - * 针对可变参数堆污染提供的重载 - * list为null或空,会查询全部映射关系 - *

- * 例: selectMapsDeep(UserDO.class, queryWrapper, Arrays.asList(User::getId, ... )) - * - * @param queryWrapper 实体对象封装操作类(可以为 null) - * @param property 需要关联的字段 - */ - default List> selectMapsDeep(Class clazz, Wrapper queryWrapper, List> property) { - return mpjQueryMapMapping(selectMaps(queryWrapper), clazz, property); - } - /** * 根据 entity 条件,查询全部记录(并翻页) * @@ -272,54 +238,6 @@ public interface MPJDeepMapper extends BaseMapper { return e; } - - /** - * 根据 entity 条件,查询全部记录(并翻页) - * - * @param page 分页查询条件(可以为 RowBounds.DEFAULT) - * @param queryWrapper 实体对象封装操作类(可以为 null) - */ - default >> E selectMapsPageDeep(E page, Class clazz, Wrapper queryWrapper) { - E e = selectMapsPage(page, queryWrapper); - mpjQueryMapMapping(e.getRecords(), clazz, null); - return e; - } - - - /** - * 根据 entity 条件,查询全部记录(并翻页) - *

- * JDK 默认不推荐泛型数组,会引起 Java堆污染(Heap Pollution) - * - * @param page 分页查询条件(可以为 RowBounds.DEFAULT) - * @param queryWrapper 实体对象封装操作类(可以为 null) - * @param property 需要关联的字段 - */ - default >> E selectMapsPageDeep(E page, Class clazz, Wrapper queryWrapper, - SFunction... property) { - E e = selectMapsPage(page, queryWrapper); - mpjQueryMapMapping(e.getRecords(), clazz, Arrays.asList(property)); - return e; - } - - - /** - * 针对可变参数堆污染提供的重载 - * list为null或空,会查询全部映射关系 - *

- * 例: selectMapsPage(page, UserDO.class, queryWrapper, Arrays.asList(User::getId, ... )) - * - * @param page 分页查询条件(可以为 RowBounds.DEFAULT) - * @param queryWrapper 实体对象封装操作类(可以为 null) - * @param property 需要关联的字段 - */ - default >> E selectMapsPageDeep(E page, Class clazz, Wrapper queryWrapper, - List> property) { - E e = selectMapsPage(page, queryWrapper); - mpjQueryMapMapping(e.getRecords(), clazz, property); - return e; - } - /** * 查询映射关系
* 对结果进行二次查询
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/service/MPJDeepService.java b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/base/service/MPJDeepService.java similarity index 99% rename from mybatis-plus-join-core/src/main/java/com/github/yulichang/base/service/MPJDeepService.java rename to mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/base/service/MPJDeepService.java index 1926c33..68b71fc 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/service/MPJDeepService.java +++ b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/base/service/MPJDeepService.java @@ -1,4 +1,4 @@ -package com.github.yulichang.base.service; +package com.github.yulichang.extension.mapping.base.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.extension.service.IService; import com.github.yulichang.annotation.EntityMapping; import com.github.yulichang.annotation.FieldMapping; -import com.github.yulichang.base.mapper.MPJDeepMapper; +import com.github.yulichang.extension.mapping.base.MPJDeepMapper; import java.io.Serializable; import java.util.Arrays; diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/config/MappingConfig.java b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/config/MappingConfig.java similarity index 66% rename from mybatis-plus-join-core/src/main/java/com/github/yulichang/config/MappingConfig.java rename to mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/config/MappingConfig.java index 64d31fb..8378b56 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/config/MappingConfig.java +++ b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/config/MappingConfig.java @@ -1,8 +1,8 @@ -package com.github.yulichang.config; +package com.github.yulichang.extension.mapping.config; -import com.baomidou.mybatisplus.core.metadata.MPJTableInfoHelper; +import com.github.yulichang.extension.mapping.mapper.MPJTableInfoHelper; import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; -import com.github.yulichang.mapper.MPJTableMapperHelper; +import com.github.yulichang.toolkit.MPJTableMapperHelper; /** * 关系映射配置 diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/mapper/MPJMappingWrapper.java b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/mapper/MPJMappingWrapper.java similarity index 98% rename from mybatis-plus-join-core/src/main/java/com/github/yulichang/mapper/MPJMappingWrapper.java rename to mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/mapper/MPJMappingWrapper.java index 173acee..96c020a 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/mapper/MPJMappingWrapper.java +++ b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/mapper/MPJMappingWrapper.java @@ -1,4 +1,4 @@ -package com.github.yulichang.mapper; +package com.github.yulichang.extension.mapping.mapper; import com.baomidou.mybatisplus.core.enums.SqlKeyword; diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/mapper/MPJTableFieldInfo.java b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/mapper/MPJTableFieldInfo.java similarity index 99% rename from mybatis-plus-join-core/src/main/java/com/github/yulichang/mapper/MPJTableFieldInfo.java rename to mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/mapper/MPJTableFieldInfo.java index ec8acf7..0359299 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/mapper/MPJTableFieldInfo.java +++ b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/mapper/MPJTableFieldInfo.java @@ -1,7 +1,6 @@ -package com.github.yulichang.mapper; +package com.github.yulichang.extension.mapping.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.MPJTableInfoHelper; import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.*; diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/mapper/MPJTableInfo.java b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/mapper/MPJTableInfo.java similarity index 95% rename from mybatis-plus-join-core/src/main/java/com/github/yulichang/mapper/MPJTableInfo.java rename to mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/mapper/MPJTableInfo.java index 7354cd0..4bd14c0 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/mapper/MPJTableInfo.java +++ b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/mapper/MPJTableInfo.java @@ -1,4 +1,4 @@ -package com.github.yulichang.mapper; +package com.github.yulichang.extension.mapping.mapper; import com.baomidou.mybatisplus.core.metadata.TableInfo; import lombok.Data; diff --git a/mybatis-plus-join-core/src/main/java/com/baomidou/mybatisplus/core/metadata/MPJTableInfoHelper.java b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/mapper/MPJTableInfoHelper.java similarity index 70% rename from mybatis-plus-join-core/src/main/java/com/baomidou/mybatisplus/core/metadata/MPJTableInfoHelper.java rename to mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/mapper/MPJTableInfoHelper.java index 8f208fd..46e08c8 100644 --- a/mybatis-plus-join-core/src/main/java/com/baomidou/mybatisplus/core/metadata/MPJTableInfoHelper.java +++ b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/mapper/MPJTableInfoHelper.java @@ -1,15 +1,13 @@ -package com.baomidou.mybatisplus.core.metadata; +package com.github.yulichang.extension.mapping.mapper; +import com.baomidou.mybatisplus.core.metadata.TableInfo; +import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.baomidou.mybatisplus.core.toolkit.ClassUtils; import com.baomidou.mybatisplus.core.toolkit.ReflectionKit; import com.github.yulichang.annotation.EntityMapping; import com.github.yulichang.annotation.FieldMapping; -import com.github.yulichang.exception.MPJException; -import com.github.yulichang.mapper.MPJTableFieldInfo; -import com.github.yulichang.mapper.MPJTableInfo; import com.github.yulichang.toolkit.MPJReflectionKit; import com.github.yulichang.toolkit.TableHelper; -import org.apache.ibatis.session.Configuration; import java.lang.reflect.Field; import java.util.ArrayList; @@ -21,12 +19,6 @@ import java.util.concurrent.ConcurrentHashMap; /** * 拷贝 {@link TableInfoHelper} * - *

用于构建resultType(DTO)对应的TableInfo - *

拷贝这个类用于更好的兼容mybatis-plus的全部功能 - *

由于 {@link TableInfo} 权限限制,所以新建 com.baomidou.mybatisplus.core.metadata 这个包 - *

为什么不把 {@link TableInfo} 这个类拷贝出来? 因为无法限制用户使用那个版本, 而TableInfo会随着版本而改动, - * 使用 mybatis-plus 的TableInfo能够兼容所有版本,也能跟好的维护 - * * @author yulichang * @see TableInfoHelper */ @@ -130,28 +122,5 @@ public class MPJTableInfoHelper { mpjTableInfo.setFieldList(mpjFieldList); } - /** - * 复制tableInfo对象 - * 由于各个版本的MP的TableInfo对象存在差异,为了兼容性采用反射,而不是getter setter - */ - public static TableInfo copyAndSetTableName(TableInfo tableInfo, String tableName) { - try { - TableInfo table; - try { - table = TableInfo.class.getDeclaredConstructor(Class.class).newInstance(tableInfo.getEntityType()); - } catch (Exception e) { - table = TableInfo.class.getDeclaredConstructor(Configuration.class, Class.class).newInstance(tableInfo.getConfiguration(), tableInfo.getEntityType()); - } - //反射拷贝对象 - Field[] fields = TableInfo.class.getDeclaredFields(); - for (Field f : fields) { - f.setAccessible(true); - f.set(table, f.get(tableInfo)); - } - table.setTableName(tableName); - return table; - } catch (Exception e) { - throw new MPJException("TableInfo 对象拷贝失败 -> " + tableInfo.getEntityType().getName()); - } - } + } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/relation/Relation.java b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/relation/Relation.java similarity index 92% rename from mybatis-plus-join-core/src/main/java/com/github/yulichang/relation/Relation.java rename to mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/relation/Relation.java index 18be5ce..bdf4a38 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/relation/Relation.java +++ b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/relation/Relation.java @@ -1,12 +1,12 @@ -package com.github.yulichang.relation; +package com.github.yulichang.extension.mapping.relation; import com.baomidou.mybatisplus.core.enums.SqlKeyword; -import com.baomidou.mybatisplus.core.metadata.MPJTableInfoHelper; +import com.github.yulichang.extension.mapping.mapper.MPJTableInfoHelper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; -import com.github.yulichang.base.mapper.wrapper.MappingQuery; -import com.github.yulichang.mapper.MPJTableFieldInfo; -import com.github.yulichang.mapper.MPJTableInfo; +import com.github.yulichang.extension.mapping.mapper.MPJTableFieldInfo; +import com.github.yulichang.extension.mapping.mapper.MPJTableInfo; +import com.github.yulichang.extension.mapping.wrapper.MappingQuery; import com.github.yulichang.toolkit.LambdaUtils; import java.util.ArrayList; diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper/wrapper/MappingQuery.java b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/wrapper/MappingQuery.java similarity index 93% rename from mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper/wrapper/MappingQuery.java rename to mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/wrapper/MappingQuery.java index 1568b6a..e014aef 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper/wrapper/MappingQuery.java +++ b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/wrapper/MappingQuery.java @@ -1,10 +1,10 @@ -package com.github.yulichang.base.mapper.wrapper; +package com.github.yulichang.extension.mapping.wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.enums.SqlKeyword; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.github.yulichang.mapper.MPJMappingWrapper; -import com.github.yulichang.mapper.MPJTableFieldInfo; +import com.github.yulichang.extension.mapping.mapper.MPJMappingWrapper; +import com.github.yulichang.extension.mapping.mapper.MPJTableFieldInfo; import java.util.List; diff --git a/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/mapper/MyBaseMapper.java b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/mapper/MyBaseMapper.java index e992c2f..58abe67 100644 --- a/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/mapper/MyBaseMapper.java +++ b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/mapper/MyBaseMapper.java @@ -1,7 +1,7 @@ package com.github.yulichang.test.join.mapper; import com.github.yulichang.base.MPJBaseMapper; -import com.github.yulichang.base.mapper.MPJDeepMapper; +import com.github.yulichang.extension.mapping.base.MPJDeepMapper; import org.apache.ibatis.annotations.Mapper; import java.util.List; diff --git a/pom.xml b/pom.xml index 6b197db..6f970d4 100644 --- a/pom.xml +++ b/pom.xml @@ -34,6 +34,7 @@ mybatis-plus-join-adapter mybatis-plus-join-core mybatis-plus-join-annotation + mybatis-plus-join-extension mybatis-plus-join-test