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 a2a009f..6e2d004 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 @@ -94,6 +94,7 @@ public class MPJSqlInjector extends DefaultSqlInjector { } private List methodFilter(List list) { + String packageStr = SelectList.class.getPackage().getName(); List methodList = Arrays.asList( "Update", "Delete", @@ -104,9 +105,10 @@ public class MPJSqlInjector extends DefaultSqlInjector { "SelectObjs", "SelectList", "SelectPage"); - list.removeIf(i -> methodList.contains(i.getClass().getSimpleName())); - list.addAll(getWrapperMethod()); - list.addAll(getJoinMethod()); + list.removeIf(i -> methodList.contains(i.getClass().getSimpleName()) && + Objects.equals(packageStr, i.getClass().getPackage().getName())); + addAll(list,getWrapperMethod()); + addAll(list,getJoinMethod()); return list; } @@ -146,6 +148,14 @@ public class MPJSqlInjector extends DefaultSqlInjector { return list; } + private void addAll(List source, List addList) { + for (AbstractMethod method : addList) { + if (source.stream().noneMatch(m -> m.getClass().getSimpleName().equals(method.getClass().getSimpleName()))) { + source.add(method); + } + } + } + @Override public void inspectInject(MapperBuilderAssistant builderAssistant, Class mapperClass) { Class modelClass = getSuperClassGenericType(mapperClass, Mapper.class, 0); diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java index a1493a4..d968477 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java @@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.toolkit.*; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.github.yulichang.config.ConfigProperties; import com.github.yulichang.query.interfaces.StringJoin; +import com.github.yulichang.toolkit.Asserts; import com.github.yulichang.toolkit.TableHelper; import java.util.*; @@ -155,7 +156,7 @@ public class MPJLambdaQueryWrapper extends AbstractLambdaWrapper select(Class entityClass, Predicate predicate) { TableInfo info = TableHelper.get(entityClass); - Assert.notNull(info, "table not find by class <%s>", entityClass.getSimpleName()); + Asserts.hasTable(info, entityClass); selectColumns.addAll(info.getFieldList().stream().filter(predicate).map(c -> alias + StringPool.DOT + c.getColumn()).collect(Collectors.toList())); return typedThis; @@ -180,7 +181,7 @@ public class MPJLambdaQueryWrapper extends AbstractLambdaWrapper selectAll(Class clazz, String as) { TableInfo info = TableHelper.get(clazz); - Assert.notNull(info, "table not find by class <%s>", clazz.getSimpleName()); + Asserts.hasTable(info, clazz); if (info.havePK()) { selectColumns.add(as + StringPool.DOT + info.getKeyColumn()); } 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 a4007f2..35ae140 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 @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.*; import com.github.yulichang.config.ConfigProperties; import com.github.yulichang.query.interfaces.StringJoin; +import com.github.yulichang.toolkit.Asserts; import com.github.yulichang.toolkit.TableHelper; import com.github.yulichang.wrapper.interfaces.Chain; @@ -153,7 +154,7 @@ public class MPJQueryWrapper extends AbstractWrapper select(Class entityClass, Predicate predicate) { TableInfo info = TableHelper.get(entityClass); - Assert.notNull(info, "table not find by class <%s>", entityClass.getSimpleName()); + Asserts.hasTable(info, entityClass); selectColumns.addAll(info.getFieldList().stream().filter(predicate).map(c -> alias + StringPool.DOT + c.getSqlSelect()).collect(Collectors.toList())); return typedThis; @@ -178,7 +179,7 @@ public class MPJQueryWrapper extends AbstractWrapper selectAll(Class clazz, String as) { TableInfo info = TableHelper.get(clazz); - Assert.notNull(info, "table not find by class <%s>", clazz); + Asserts.hasTable(info, clazz); if (ConfigProperties.tableInfoAdapter.mpjHasPK(info)) { selectColumns.add(as + StringPool.DOT + info.getKeySqlSelect()); } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/Asserts.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/Asserts.java new file mode 100644 index 0000000..63fb2c0 --- /dev/null +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/Asserts.java @@ -0,0 +1,19 @@ +package com.github.yulichang.toolkit; + +import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; +import com.baomidou.mybatisplus.core.metadata.TableInfo; + +/** + * @author yulichang + * @since 1.4.5 + */ +public class Asserts { + + public static void hasTable(TableInfo tableInfo, Class entityClass) { + if (tableInfo == null) { + throw new MybatisPlusException(String.format( + "mapper not find by class <%s> , add mapper and extends BaseMapper or MPJBaseMapper", + entityClass.getSimpleName())); + } + } +} diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/LogicInfoUtils.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/LogicInfoUtils.java index 87556f3..284d879 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/LogicInfoUtils.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/LogicInfoUtils.java @@ -45,7 +45,7 @@ public class LogicInfoUtils implements Constants { String logicStr; TableInfo tableInfo = TableHelper.get(clazz); - Assert.notNull(tableInfo, "table not find by class <%s>", clazz.getSimpleName()); + Asserts.hasTable(tableInfo, clazz); TableFieldInfo logicField = ConfigProperties.tableInfoAdapter.mpjGetLogicField(tableInfo); if (ConfigProperties.tableInfoAdapter.mpjHasLogic(tableInfo) && Objects.nonNull(logicField)) { final String value = logicField.getLogicNotDeleteValue(); 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 7067b9b..86e3a02 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 @@ -1,6 +1,13 @@ package com.github.yulichang.toolkit; +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; + /** * spring容器工具类 * @@ -19,6 +26,18 @@ public class SpringContentUtils { return SpringContentUtils.springContext.getBean(clazz); } + @SuppressWarnings("unchecked") + public static T getMapper(Class clazz) { + if (Objects.isNull(springContext)) { + SqlSession session = SqlHelper.sqlSession(clazz); + Assert.notNull(session, "mapper not find by class <%s>", clazz.getSimpleName()); + return (T) SqlHelper.getMapper(clazz, session); + } + Class mapper = MPJTableMapperHelper.getMapper(clazz); + Assert.notNull(mapper, "mapper not find by class <%s>", clazz.getSimpleName()); + return (T)getBean(mapper); + } + public interface SpringContext { T getBean(Class clazz); 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 8fcdc47..e94ad5e 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 @@ -17,18 +17,14 @@ public class SqlHelper { public static R exec(Class entityClass, Function, R> function) { Assert.notNull(entityClass,"请使用 new MPJLambdaWrapper(主表.class) 或 JoinWrappers.lambda(主表.class) 构造方法"); - Class mapperClass = MPJTableMapperHelper.getMapper(entityClass); - Assert.notNull(mapperClass, "mapper not find by class <%s>", entityClass.getSimpleName()); - Object mapper = SpringContentUtils.getBean(mapperClass); + Object mapper = SpringContentUtils.getMapper(entityClass); Assert.notNull(mapper, "mapper not init <%s>", entityClass.getSimpleName()); return function.apply((BaseMapper) mapper); } public static R execJoin(Class entityClass, Function, R> function) { Assert.notNull(entityClass,"请使用 new MPJLambdaWrapper(主表.class) 或 JoinWrappers.lambda(主表.class) 构造方法"); - Class mapperClass = MPJTableMapperHelper.getMapper(entityClass); - Assert.notNull(mapperClass, "mapper not find by class <%s>", entityClass.getSimpleName()); - Object mapper = SpringContentUtils.getBean(mapperClass); + 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); diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/support/ColumnCache.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/support/ColumnCache.java index f7a5056..e4e09ea 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/support/ColumnCache.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/support/ColumnCache.java @@ -1,8 +1,8 @@ package com.github.yulichang.toolkit.support; import com.baomidou.mybatisplus.core.metadata.TableInfo; -import com.baomidou.mybatisplus.core.toolkit.Assert; import com.github.yulichang.config.ConfigProperties; +import com.github.yulichang.toolkit.Asserts; import com.github.yulichang.toolkit.TableHelper; import com.github.yulichang.wrapper.segments.SelectCache; @@ -28,7 +28,7 @@ public class ColumnCache { public static List getListField(Class clazz) { return LIST_CACHE.computeIfAbsent(clazz, c -> { TableInfo tableInfo = TableHelper.get(clazz); - Assert.notNull(tableInfo, "table not find by class <%s>", c.getSimpleName()); + Asserts.hasTable(tableInfo, c); List list = new ArrayList<>(); if (ConfigProperties.tableInfoAdapter.mpjHasPK(tableInfo)) { list.add(new SelectCache(clazz, true, tableInfo.getKeyColumn(), tableInfo.getKeyType(), tableInfo.getKeyProperty(), null)); diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java index 2b22e8e..50a6fe5 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java @@ -409,7 +409,7 @@ public class MPJLambdaWrapper extends MPJAbstractLambdaWrapper", clazz.getSimpleName()); + Asserts.hasTable(info, clazz); MPJLambdaWrapper instance = instance(newIndex, keyWord, clazz, info.getTableName()); instance.isNo = true; instance.isMain = false; diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Query.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Query.java index bea6443..2e66d89 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Query.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Query.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.Assert; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import com.github.yulichang.toolkit.Asserts; import com.github.yulichang.toolkit.LambdaUtils; import com.github.yulichang.toolkit.MPJReflectionKit; import com.github.yulichang.toolkit.TableHelper; @@ -55,7 +56,7 @@ public interface Query extends Serializable { */ default Children select(Class entityClass, Predicate predicate) { TableInfo info = TableHelper.get(entityClass); - Assert.notNull(info, "table not find by class <%s>", entityClass.getSimpleName()); + Asserts.hasTable(info, entityClass); Map cacheMap = ColumnCache.getMapField(entityClass); info.getFieldList().stream().filter(predicate).collect(Collectors.toList()).forEach( i -> getSelectColum().add(new SelectNormal(cacheMap.get(i.getProperty()), getIndex(), isHasAlias(), getAlias()))); diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/resultmap/MybatisLabel.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/resultmap/MybatisLabel.java index 3983ab4..2e19ade 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/resultmap/MybatisLabel.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/resultmap/MybatisLabel.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.Assert; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import com.github.yulichang.toolkit.Asserts; import com.github.yulichang.toolkit.LambdaUtils; import com.github.yulichang.toolkit.MPJReflectionKit; import com.github.yulichang.toolkit.TableHelper; @@ -238,7 +239,7 @@ public class MybatisLabel implements Label { private void autoBuild(boolean auto, Class entityClass, Class tagClass) { TableInfo tableInfo = TableHelper.get(entityClass); - Assert.notNull(tableInfo, "table not find by class <%s>", entityClass.getSimpleName()); + Asserts.hasTable(tableInfo, entityClass); Map tagMap = MPJReflectionKit.getFieldMap(tagClass); if (auto && !tagMap.isEmpty()) { List listField = ColumnCache.getListField(entityClass); diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectCache.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectCache.java index 8e10837..12dfb34 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectCache.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectCache.java @@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.Assert; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.github.yulichang.config.ConfigProperties; +import com.github.yulichang.toolkit.Asserts; import com.github.yulichang.toolkit.TableHelper; +import jdk.nashorn.internal.AssertsEnabled; import lombok.Getter; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.type.TypeHandler; @@ -56,7 +58,7 @@ public class SelectCache { this.hasTypeHandle = this.tableFieldInfo.getTypeHandler() != null && tableFieldInfo.getTypeHandler() != UnknownTypeHandler.class; if (this.hasTypeHandle) { TableInfo info = TableHelper.get(clazz); - Assert.notNull(info, "table not find by class <%s>", clazz.getSimpleName()); + Asserts.hasTable(info, clazz); this.typeHandler = getTypeHandler(ConfigProperties.tableInfoAdapter.mpjGetConfiguration(info), tableFieldInfo); } else { this.typeHandler = null; diff --git a/mybatis-plus-join-test/test-collection/src/test/java/com/github/yulichang/test/collection/CollectionTest.java b/mybatis-plus-join-test/test-collection/src/test/java/com/github/yulichang/test/collection/CollectionTest.java index bb2560b..34ba8db 100644 --- a/mybatis-plus-join-test/test-collection/src/test/java/com/github/yulichang/test/collection/CollectionTest.java +++ b/mybatis-plus-join-test/test-collection/src/test/java/com/github/yulichang/test/collection/CollectionTest.java @@ -136,4 +136,18 @@ class CollectionTest { assert dtos2.get(0).getB().getC().getD().getE().getId() != null; assert Objects.equals(dtos2.get(0).getB().getName(), "tableD1"); } + + void test(){ + MPJLambdaWrapper wrapper1 = new MPJLambdaWrapper() + .selectAll(TableA.class) + .selectAssociation(TableB.class, TableADTO::getB, b -> b + .collection(TableC.class, TableBDTO::getCList)) + .leftJoin(TableB.class, TableB::getAid, TableA::getId) + .leftJoin(TableC.class, TableC::getBid, TableB::getId) + .leftJoin(TableD.class, TableD::getCid, TableC::getId) + .leftJoin(TableE.class, TableE::getDid, TableD::getId); + List dtos1 = tableAMapper.selectJoinList(TableADTO.class, wrapper1); + + + } } diff --git a/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/dto/UserDTO.java b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/dto/UserDTO.java index 9d5fe0b..cd52c8c 100644 --- a/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/dto/UserDTO.java +++ b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/dto/UserDTO.java @@ -42,6 +42,8 @@ public class UserDTO { private List addressList; + private AddressDTO addressDTO; + private List addressIds; private List children; 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 54b56c2..c08f8f0 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 @@ -684,6 +684,12 @@ class LambdaWrapperTest { .gt(UserDO::getId, 3) .lt(UserDO::getId, 8)); assert dos.size() == 4; + + ThreadLocalUtils.set("SELECT id,pid,`name`,`json`,sex,head_img,create_time,address_id,address_id2,del,create_by,update_by FROM `user` t WHERE t.del=false AND (t.id > ? AND t.id < ?)"); + List dos1 = userMapper.selectList(new MPJLambdaWrapper() + .gt(UserDO::getId, 3) + .lt(UserDO::getId, 8)); + assert dos1.size() == 4; } /**