From 48f29cd6b102f391f6f68262a85907e01f9c54cd Mon Sep 17 00:00:00 2001 From: KamTo Hung Date: Thu, 13 Apr 2023 18:31:21 +0800 Subject: [PATCH 1/8] feature(https://gitee.com/dromara/stream-query/issues/I6VGN0) --- .../annotation/EnableMybatisPlusPlugin.java | 37 ++++++++++ .../StreamPluginConfiguration.java | 8 +-- .../StreamScannerConfigurer.java | 69 +++++++++++++++++-- .../configuration/StreamScannerRegistrar.java | 24 ++++++- 4 files changed, 123 insertions(+), 15 deletions(-) diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/annotation/EnableMybatisPlusPlugin.java b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/annotation/EnableMybatisPlusPlugin.java index 8d125ac0..8c2803e0 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/annotation/EnableMybatisPlusPlugin.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/annotation/EnableMybatisPlusPlugin.java @@ -33,9 +33,46 @@ import java.lang.annotation.*; @Import({StreamConfigurationSelector.class}) public @interface EnableMybatisPlusPlugin { + /** + * Alias for {@link #basePackages()} + * + * @return base packages + */ String[] value() default {}; + /** + * Base packages + * + * @return base packages + */ String[] basePackages() default {}; + /** + * Alias for {@link #basePackages()}. scan base package classes + * + * @return base package classes for scanning + */ Class[] basePackageClasses() default {}; + + /** + * Specify classes + * + * @return classes + */ + Class[] classes() default {}; + + /** + * Alias for {@link #basePackages()}. scan annotation classes + * + * @return annotation class for scanning + */ + Class annotation() default Annotation.class; + + /** + * Alias for {@link #basePackages()}. scan interface classes + * + * @return interface class for scanning + */ + Class scanInterface() default Class.class; + } diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamPluginConfiguration.java b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamPluginConfiguration.java index b9fc5384..510b9ac8 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamPluginConfiguration.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamPluginConfiguration.java @@ -92,12 +92,6 @@ public class StreamPluginConfiguration { @ConditionalOnMissingBean(DynamicMapperHandler.class) public DynamicMapperHandler dynamicMapperHandler( SqlSessionFactory sqlSessionFactory, StreamScannerConfigurer streamScannerConfigurer) { - /// 扫描po包下的所有类,作为entity - Set basePackages = streamScannerConfigurer.getBasePackages(); - List> entityClassList = new ArrayList<>(); - for (String basePackage : basePackages) { - entityClassList.addAll(ClassHelper.scanClasses(basePackage)); - } - return new DynamicMapperHandler(sqlSessionFactory, entityClassList); + return new DynamicMapperHandler(sqlSessionFactory, streamScannerConfigurer.getEntityClassList()); } } diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerConfigurer.java b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerConfigurer.java index 69bda878..96d5a3d1 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerConfigurer.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerConfigurer.java @@ -16,23 +16,82 @@ */ package org.dromara.streamquery.stream.plugin.mybatisplus.engine.configuration; + +import org.dromara.streamquery.stream.core.clazz.ClassHelper; + +import java.lang.annotation.Annotation; +import java.util.Collection; import java.util.Set; /** + *
  * stream scanner configurer
+ * from {@link StreamScannerRegistrar}
+ * 
* - * @author KamTo Hung from {@link StreamScannerRegistrar} + * @author KamTo Hung */ public class StreamScannerConfigurer { - /** base package */ + /** + * base package + */ private Set basePackages; - public Set getBasePackages() { - return basePackages; - } + /** + * specify classes + */ + private Set> classes; + + /** + * annotation + */ + private Class annotation; + + /** + * scan interface + */ + private Class interfaceClass; + + /** + * entity class list + */ + private Collection> entityClassList; public void setBasePackages(Set basePackages) { this.basePackages = basePackages; } + + public Set> getClasses() { + return classes; + } + + public void setClasses(Set> classes) { + this.classes = classes; + } + + public void setAnnotation(Class annotation) { + this.annotation = annotation; + } + + public void setInterfaceClass(Class interfaceClass) { + this.interfaceClass = interfaceClass; + } + + public Collection> getEntityClassList() { + return entityClassList; + } + + public void register() { + /// 扫描po包下的所有类,作为entity + Set basePackages = this.basePackages; + for (String basePackage : basePackages) { + entityClassList.addAll(ClassHelper.scanClasses(basePackage)); + } + // 指定类 + entityClassList.addAll(classes); + // TODO 注解的类 + // TODO 实现接口的类 + } + } diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerRegistrar.java b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerRegistrar.java index 43719a30..290211cd 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerRegistrar.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerRegistrar.java @@ -25,6 +25,7 @@ import org.springframework.core.type.AnnotationMetadata; import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; +import java.lang.annotation.Annotation; import java.util.Arrays; import java.util.HashSet; import java.util.Objects; @@ -50,17 +51,34 @@ public class StreamScannerRegistrar implements ImportBeanDefinitionRegistrar { basePackages.addAll( Arrays.stream(annotationAttributes.getStringArray("value")) .filter(StringUtils::hasText) - .collect(Collectors.toList())); + .collect(Collectors.toSet())); basePackages.addAll( Arrays.stream(annotationAttributes.getStringArray("basePackages")) .filter(StringUtils::hasText) - .collect(Collectors.toList())); + .collect(Collectors.toSet())); basePackages.addAll( Arrays.stream(annotationAttributes.getClassArray("basePackageClasses")) .filter(Objects::nonNull) .map(ClassUtils::getPackageName) - .collect(Collectors.toList())); + .collect(Collectors.toSet())); builder.addPropertyValue("basePackages", basePackages); + + Set classes = Arrays.stream(annotationAttributes.getClassArray("classes")) + .filter(Objects::nonNull) + .map(ClassUtils::getPackageName) + .collect(Collectors.toSet()); + builder.addPropertyValue("classes", classes); + + Class annotation = annotationAttributes.getClass("annotation"); + if (!Annotation.class.equals(annotation)) { + builder.addPropertyValue("annotation", annotation); + } + + Class scanInterface = annotationAttributes.getClass("interfaceClass"); + if (!Class.class.equals(scanInterface)) { + builder.addPropertyValue("interfaceClass", scanInterface); + } + registry.registerBeanDefinition("streamScannerConfigurer", builder.getBeanDefinition()); } } -- Gitee From 90f15df7dc6fc590c079a309b2d97b601d200b4a Mon Sep 17 00:00:00 2001 From: VampireAchao Date: Thu, 13 Apr 2023 18:48:15 +0800 Subject: [PATCH 2/8] :trollface: --- .../stream/core/collection/Lists.java | 16 +++- .../stream/core/collection/Maps.java | 51 ++++++----- .../stream/core/collection/Sets.java | 13 ++- .../stream/core/collection/MapsTest.java | 6 +- .../stream/plugin/mybatisplus/Database.java | 57 +----------- .../plugin/mybatisplus/WrapperHelper.java | 90 +++++++++++++++++++ .../plugin/mybatisplus/DatabaseTest.java | 27 ------ .../plugin/mybatisplus/WrapperHelperTest.java | 83 +++++++++++++++++ 8 files changed, 236 insertions(+), 107 deletions(-) create mode 100644 stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/WrapperHelper.java create mode 100644 stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/WrapperHelperTest.java diff --git a/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Lists.java b/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Lists.java index 7fffeebe..70288521 100644 --- a/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Lists.java +++ b/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Lists.java @@ -50,7 +50,7 @@ public class Lists { * ofColl. * * @param values 集合元素 - * @param a T class + * @param a T class * @return {@link java.util.List}<{@code T}> 集合元素类型 */ public static List ofColl(Collection values) { @@ -60,11 +60,23 @@ public class Lists { return new ArrayList<>(values); } + + /** + * ofSize. + * + * @param initialCapacity initialCapacity + * @param a T class + * @return List + */ + public static List ofSize(int initialCapacity) { + return new ArrayList<>(initialCapacity); + } + /** * first. * * @param values a {@link java.util.List} object - * @param a T class + * @param a T class * @return a T object */ public static T first(List values) { diff --git a/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Maps.java b/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Maps.java index 9c752da7..a02227a7 100644 --- a/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Maps.java +++ b/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Maps.java @@ -37,26 +37,37 @@ public class Maps { /** * of. * - * @param initialCapacity a int * @param a K class * @param a V class * @return a {@link java.util.Map} object */ - public static Map of(int initialCapacity) { + public static Map of() { + return new HashMap<>(); + } + + /** + * of. + * + * @param initialCapacity a int + * @param a K class + * @param a V class + * @return a {@link java.util.Map} object + */ + public static Map ofSize(int initialCapacity) { return new HashMap<>(initialCapacity); } /** * of. * - * @param k a K object - * @param v a V object + * @param k a K object + * @param v a V object * @param a K class * @param a V class * @return a {@link java.util.Map} object */ - public static Map of(K k, V v) { - final Map map = of(1); + public static Map ofSize(K k, V v) { + final Map map = ofSize(1); map.put(k, v); return map; } @@ -64,16 +75,16 @@ public class Maps { /** * of. * - * @param k a K object - * @param v a V object - * @param k1 a K object - * @param v1 a V object + * @param k a K object + * @param v a V object + * @param k1 a K object + * @param v1 a V object * @param a K class * @param a V class * @return a {@link java.util.Map} object */ - public static Map of(K k, V v, K k1, V v1) { - final Map map = of(1 << 1); + public static Map ofSize(K k, V v, K k1, V v1) { + final Map map = ofSize(1 << 1); map.put(k, v); map.put(k1, v1); return map; @@ -82,18 +93,18 @@ public class Maps { /** * of. * - * @param k a K object - * @param v a V object - * @param k1 a K object - * @param v1 a V object - * @param k2 a K object - * @param v2 a V object + * @param k a K object + * @param v a V object + * @param k1 a K object + * @param v1 a V object + * @param k2 a K object + * @param v2 a V object * @param a K class * @param a V class * @return a {@link java.util.Map} object */ - public static Map of(K k, V v, K k1, V v1, K k2, V v2) { - final Map map = of(1 << 2); + public static Map ofSize(K k, V v, K k1, V v1, K k2, V v2) { + final Map map = ofSize(1 << 2); map.put(k, v); map.put(k1, v1); map.put(k2, v2); diff --git a/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Sets.java b/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Sets.java index ca99426f..16700f22 100644 --- a/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Sets.java +++ b/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Sets.java @@ -49,7 +49,7 @@ public class Sets { * ofColl. * * @param values a {@link java.util.Collection} object - * @param a T class + * @param a T class * @return a {@link java.util.Set} object */ public static Set ofColl(Collection values) { @@ -59,6 +59,17 @@ public class Sets { return new HashSet<>(values); } + /** + * ofSize. + * + * @param initialCapacity initialCapacity + * @param a T class + * @return Set + */ + public static Set ofSize(int initialCapacity) { + return new HashSet<>(initialCapacity); + } + /** * 获取一个空的Set * diff --git a/stream-core/src/test/java/org/dromara/streamquery/stream/core/collection/MapsTest.java b/stream-core/src/test/java/org/dromara/streamquery/stream/core/collection/MapsTest.java index da2c61cc..ade5c4f8 100644 --- a/stream-core/src/test/java/org/dromara/streamquery/stream/core/collection/MapsTest.java +++ b/stream-core/src/test/java/org/dromara/streamquery/stream/core/collection/MapsTest.java @@ -31,10 +31,10 @@ class MapsTest { @Test void testOf() { - Assertions.assertEquals("value", Maps.of("key", "value").get("key")); - Assertions.assertEquals("value1", Maps.of("key", "value", "key1", "value1").get("key1")); + Assertions.assertEquals("value", Maps.ofSize("key", "value").get("key")); + Assertions.assertEquals("value1", Maps.ofSize("key", "value", "key1", "value1").get("key1")); Assertions.assertEquals( - "value2", Maps.of("key", "value", "key1", "value1", "key2", "value2").get("key2")); + "value2", Maps.ofSize("key", "value", "key1", "value1", "key2", "value2").get("key2")); } @Test diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/Database.java b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/Database.java index 10656a98..c1888ef5 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/Database.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/Database.java @@ -43,7 +43,6 @@ import org.apache.ibatis.reflection.property.PropertyNamer; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.type.SimpleTypeRegistry; -import org.dromara.streamquery.stream.core.bean.BeanHelper; import org.dromara.streamquery.stream.core.collection.Lists; import org.dromara.streamquery.stream.core.lambda.LambdaHelper; import org.dromara.streamquery.stream.core.lambda.function.SerBiCons; @@ -58,7 +57,6 @@ import org.dromara.streamquery.stream.plugin.mybatisplus.engine.mapper.IMapper; import org.mybatis.spring.SqlSessionUtils; import java.io.Serializable; -import java.lang.reflect.Method; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; @@ -80,9 +78,6 @@ public class Database { private static final Map, Class> ENTITY_MAPPER_CLASS_CACHE = new ConcurrentHashMap<>(); - private static final Map> LAMBDA_GETTER_CACHE = new WeakHashMap<>(); - - /** */ private Database() { /* Do not new me! */ } @@ -1235,7 +1230,7 @@ public class Database { * @param entityList 实体集合 * @return 实体类型 */ - private static Class getEntityClass(Collection entityList) { + protected static Class getEntityClass(Collection entityList) { Class entityClass = null; for (T entity : entityList) { if (entity != null && entity.getClass() != null) { @@ -1245,7 +1240,7 @@ public class Database { } Assert.notNull(entityClass, "error: can not get entityClass from entityList"); Assert.isFalse( - SimpleTypeRegistry.isSimpleType(entityClass), "error: entityClass can not be simple type"); + SimpleTypeRegistry.isSimpleType(entityClass), "error: entityClass can not be simple type"); return entityClass; } @@ -1255,7 +1250,7 @@ public class Database { * @param queryWrapper 条件构造器 * @return 实体类型 */ - private static Class getEntityClass(AbstractWrapper queryWrapper) { + protected static Class getEntityClass(AbstractWrapper queryWrapper) { Class entityClass = queryWrapper.getEntityClass(); if (entityClass == null) { T entity = queryWrapper.getEntity(); @@ -1281,52 +1276,6 @@ public class Database { "error: can not find TableInfo from Class: \"%s\".", entityClass.getName())); } - /** - * in查询 - * - * @param wrapper 条件构造器 - * @param dataList 数据 - * @param 类型 - * @return 条件构造器 - */ - @SuppressWarnings("unchecked") - public static LambdaQueryWrapper inList(LambdaQueryWrapper wrapper, List dataList) { - if (Lists.isEmpty(dataList)) { - return wrapper; - } - final Class entityClass = getEntityClass(dataList); - final List fieldList = TableInfoHelper.getTableInfo(entityClass).getFieldList(); - wrapper.nested( - w -> - Steam.of(fieldList) - .forEachIdx( - (tableField, idx) -> { - SFunction getterFunction = - (SFunction) - LAMBDA_GETTER_CACHE.computeIfAbsent( - entityClass + StringPool.AT + tableField.getProperty(), - property -> { - Method getter = - ReflectHelper.getMethod( - entityClass, - BeanHelper.GETTER_PREFIX - + tableField - .getProperty() - .substring(0, 1) - .toUpperCase(Locale.ROOT) - + tableField.getProperty().substring(1)); - return LambdaHelper.revert(SFunction.class, getter); - }); - final List list = - Steam.of(dataList).map(getterFunction).nonNull().toList(); - if (idx != 0) { - w.or(); - } - w.in(Lists.isNotEmpty(list), getterFunction, list); - })); - return wrapper; - } - /** * 判断是否动态mapper * diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/WrapperHelper.java b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/WrapperHelper.java new file mode 100644 index 00000000..1c27e105 --- /dev/null +++ b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/WrapperHelper.java @@ -0,0 +1,90 @@ +package org.dromara.streamquery.stream.plugin.mybatisplus; + +import com.baomidou.mybatisplus.core.conditions.AbstractWrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; +import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import org.dromara.streamquery.stream.core.bean.BeanHelper; +import org.dromara.streamquery.stream.core.collection.Lists; +import org.dromara.streamquery.stream.core.lambda.LambdaHelper; +import org.dromara.streamquery.stream.core.reflect.ReflectHelper; +import org.dromara.streamquery.stream.core.stream.Steam; + +import java.lang.reflect.Method; +import java.util.*; +import java.util.function.BiConsumer; + +/** + * @author VampireAchao + * @since 2023/4/13 17:54 + */ +public class WrapperHelper { + + private static final Map> LAMBDA_GETTER_CACHE = new WeakHashMap<>(); + + private WrapperHelper() { + /* Do not new me! */ + } + + /** + * in查询 + * + * @param wrapper 条件构造器 + * @param dataList 数据 + * @param 类型 + * @return 条件构造器 + */ + @SuppressWarnings("unchecked") + public static LambdaQueryWrapper multiIn(LambdaQueryWrapper wrapper, List dataList) { + if (Lists.isEmpty(dataList)) { + return wrapper; + } + final Class entityClass = Database.getEntityClass(dataList); + final List fieldList = TableInfoHelper.getTableInfo(entityClass).getFieldList(); + multiOr(wrapper, fieldList, (w, tableField) -> { + SFunction getterFunction = + (SFunction) + LAMBDA_GETTER_CACHE.computeIfAbsent( + entityClass + StringPool.AT + tableField.getProperty(), + property -> { + Method getter = + ReflectHelper.getMethod( + entityClass, + BeanHelper.GETTER_PREFIX + + tableField + .getProperty() + .substring(0, 1) + .toUpperCase(Locale.ROOT) + + tableField.getProperty().substring(1)); + return LambdaHelper.revert(SFunction.class, getter); + }); + final List list = + Steam.of(dataList).map(getterFunction).nonNull().toList(); + w.in(Lists.isNotEmpty(list), getterFunction, list); + }); + return wrapper; + } + + + /** + * or 查询 + * + * @param wrapper 条件构造器 + * @param dataList 数据 + * @param biConsumer 逻辑处理 + * @param 条件构造器 + * @param 实体类型 + * @param 数据类型 + * @return 条件构造器 + */ + public static , T, R> + W multiOr(W wrapper, Collection dataList, BiConsumer biConsumer) { + if (Lists.isEmpty(dataList)) { + return Database.notActive(wrapper); + } + return wrapper.nested(w -> dataList.forEach(data -> biConsumer.accept(w.or(), data))); + } + +} diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/DatabaseTest.java b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/DatabaseTest.java index 36154306..fc34d8f0 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/DatabaseTest.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/DatabaseTest.java @@ -462,31 +462,4 @@ class DatabaseTest { Assertions.assertTrue(Database.isDynamicMapper(roleMapperClass.getName())); } } - - @Test - void testWhereRelation() { - LambdaQueryWrapper wrapper = - Database.inList( - Wrappers.lambdaQuery(UserInfo.class), - Lists.of( - new UserInfo() { - { - setName("Jon"); - } - }, - new UserInfo() { - { - setEmail("test2@baomidou.com"); - } - }, - new UserInfo() { - { - setName("Tom"); - } - })); - List userInfos = Database.list(wrapper); - Assertions.assertEquals("Jon", userInfos.get(0).getName()); - Assertions.assertEquals("test2@baomidou.com", userInfos.get(1).getEmail()); - Assertions.assertEquals("Tom", userInfos.get(2).getName()); - } } diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/WrapperHelperTest.java b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/WrapperHelperTest.java new file mode 100644 index 00000000..2bfe92d9 --- /dev/null +++ b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/WrapperHelperTest.java @@ -0,0 +1,83 @@ +package org.dromara.streamquery.stream.plugin.mybatisplus; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.test.autoconfigure.MybatisPlusTest; +import lombok.val; +import org.dromara.streamquery.stream.core.collection.Lists; +import org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po.UserInfo; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Objects; + +/** + * @author VampireAchao + * @since 2023/4/13 18:02 + */ +@MybatisPlusTest +class WrapperHelperTest { + + @Test + void testMultiIn() { + LambdaQueryWrapper wrapper = + WrapperHelper.multiIn( + Wrappers.lambdaQuery(UserInfo.class), + Lists.of( + new UserInfo() { + { + setName("Jon"); + } + }, + new UserInfo() { + { + setEmail("test2@baomidou.com"); + } + }, + new UserInfo() { + { + setName("Tom"); + } + })); + // ==> Preparing: SELECT id,name,age,email,version,gmt_deleted FROM user_info WHERE gmt_deleted='2001-01-01 00:00:00' AND ((name IN (?,?) OR email IN (?))) + // ==> Parameters: Jon(String), Tom(String), test2@baomidou.com(String) + List userInfos = Database.list(wrapper); + Assertions.assertEquals("Jon", userInfos.get(0).getName()); + Assertions.assertEquals("test2@baomidou.com", userInfos.get(1).getEmail()); + Assertions.assertEquals("Tom", userInfos.get(2).getName()); + } + + @Test + void testMultiOr() { + val dataList = + Lists.of(new UserInfo() { + { + setName("Jon"); + } + }, + new UserInfo() { + { + setEmail("test2@baomidou.com"); + } + }, + new UserInfo() { + { + setName("Tom"); + } + }); + val wrapper = WrapperHelper.multiOr( + Wrappers.lambdaQuery(UserInfo.class), + dataList, (w, data) -> { + w.eq(Objects.nonNull(data.getEmail()), UserInfo::getEmail, data.getEmail()) + .eq(StringUtils.isNotBlank(data.getName()), UserInfo::getName, data.getName()); + }); + // ==> Preparing: SELECT id,name,age,email,version,gmt_deleted FROM user_info WHERE gmt_deleted='2001-01-01 00:00:00' AND ((name = ? OR email = ? OR name = ?)) + // ==> Parameters: Jon(String), test2@baomidou.com(String), Tom(String) + List userInfos = Database.list(wrapper); + Assertions.assertEquals("Jon", userInfos.get(0).getName()); + Assertions.assertEquals("test2@baomidou.com", userInfos.get(1).getEmail()); + Assertions.assertEquals("Tom", userInfos.get(2).getName()); + } +} -- Gitee From 6f875d861a9844b999c8f4368c92b62474990497 Mon Sep 17 00:00:00 2001 From: VampireAchao Date: Thu, 13 Apr 2023 18:49:08 +0800 Subject: [PATCH 3/8] :trollface: --- .../stream/core/collection/Lists.java | 7 +- .../stream/core/collection/Maps.java | 28 ++-- .../stream/core/collection/Sets.java | 4 +- .../stream/plugin/mybatisplus/Database.java | 2 +- .../plugin/mybatisplus/WrapperHelper.java | 136 ++++++++++-------- .../plugin/mybatisplus/WrapperHelperTest.java | 123 ++++++++-------- 6 files changed, 160 insertions(+), 140 deletions(-) diff --git a/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Lists.java b/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Lists.java index 70288521..ee411a4b 100644 --- a/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Lists.java +++ b/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Lists.java @@ -50,7 +50,7 @@ public class Lists { * ofColl. * * @param values 集合元素 - * @param a T class + * @param a T class * @return {@link java.util.List}<{@code T}> 集合元素类型 */ public static List ofColl(Collection values) { @@ -60,12 +60,11 @@ public class Lists { return new ArrayList<>(values); } - /** * ofSize. * * @param initialCapacity initialCapacity - * @param a T class + * @param a T class * @return List */ public static List ofSize(int initialCapacity) { @@ -76,7 +75,7 @@ public class Lists { * first. * * @param values a {@link java.util.List} object - * @param a T class + * @param a T class * @return a T object */ public static T first(List values) { diff --git a/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Maps.java b/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Maps.java index a02227a7..cb7546ef 100644 --- a/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Maps.java +++ b/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Maps.java @@ -49,8 +49,8 @@ public class Maps { * of. * * @param initialCapacity a int - * @param a K class - * @param a V class + * @param a K class + * @param a V class * @return a {@link java.util.Map} object */ public static Map ofSize(int initialCapacity) { @@ -60,8 +60,8 @@ public class Maps { /** * of. * - * @param k a K object - * @param v a V object + * @param k a K object + * @param v a V object * @param a K class * @param a V class * @return a {@link java.util.Map} object @@ -75,10 +75,10 @@ public class Maps { /** * of. * - * @param k a K object - * @param v a V object - * @param k1 a K object - * @param v1 a V object + * @param k a K object + * @param v a V object + * @param k1 a K object + * @param v1 a V object * @param a K class * @param a V class * @return a {@link java.util.Map} object @@ -93,12 +93,12 @@ public class Maps { /** * of. * - * @param k a K object - * @param v a V object - * @param k1 a K object - * @param v1 a V object - * @param k2 a K object - * @param v2 a V object + * @param k a K object + * @param v a V object + * @param k1 a K object + * @param v1 a V object + * @param k2 a K object + * @param v2 a V object * @param a K class * @param a V class * @return a {@link java.util.Map} object diff --git a/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Sets.java b/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Sets.java index 16700f22..cd5fecff 100644 --- a/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Sets.java +++ b/stream-core/src/main/java/org/dromara/streamquery/stream/core/collection/Sets.java @@ -49,7 +49,7 @@ public class Sets { * ofColl. * * @param values a {@link java.util.Collection} object - * @param a T class + * @param a T class * @return a {@link java.util.Set} object */ public static Set ofColl(Collection values) { @@ -63,7 +63,7 @@ public class Sets { * ofSize. * * @param initialCapacity initialCapacity - * @param a T class + * @param a T class * @return Set */ public static Set ofSize(int initialCapacity) { diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/Database.java b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/Database.java index c1888ef5..c2248ce8 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/Database.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/Database.java @@ -1240,7 +1240,7 @@ public class Database { } Assert.notNull(entityClass, "error: can not get entityClass from entityList"); Assert.isFalse( - SimpleTypeRegistry.isSimpleType(entityClass), "error: entityClass can not be simple type"); + SimpleTypeRegistry.isSimpleType(entityClass), "error: entityClass can not be simple type"); return entityClass; } diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/WrapperHelper.java b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/WrapperHelper.java index 1c27e105..1a0d5b82 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/WrapperHelper.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/WrapperHelper.java @@ -1,3 +1,19 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.dromara.streamquery.stream.plugin.mybatisplus; import com.baomidou.mybatisplus.core.conditions.AbstractWrapper; @@ -22,69 +38,69 @@ import java.util.function.BiConsumer; */ public class WrapperHelper { - private static final Map> LAMBDA_GETTER_CACHE = new WeakHashMap<>(); + private static final Map> LAMBDA_GETTER_CACHE = new WeakHashMap<>(); - private WrapperHelper() { - /* Do not new me! */ - } + private WrapperHelper() { + /* Do not new me! */ + } - /** - * in查询 - * - * @param wrapper 条件构造器 - * @param dataList 数据 - * @param 类型 - * @return 条件构造器 - */ - @SuppressWarnings("unchecked") - public static LambdaQueryWrapper multiIn(LambdaQueryWrapper wrapper, List dataList) { - if (Lists.isEmpty(dataList)) { - return wrapper; - } - final Class entityClass = Database.getEntityClass(dataList); - final List fieldList = TableInfoHelper.getTableInfo(entityClass).getFieldList(); - multiOr(wrapper, fieldList, (w, tableField) -> { - SFunction getterFunction = - (SFunction) - LAMBDA_GETTER_CACHE.computeIfAbsent( - entityClass + StringPool.AT + tableField.getProperty(), - property -> { - Method getter = - ReflectHelper.getMethod( - entityClass, - BeanHelper.GETTER_PREFIX - + tableField - .getProperty() - .substring(0, 1) - .toUpperCase(Locale.ROOT) - + tableField.getProperty().substring(1)); - return LambdaHelper.revert(SFunction.class, getter); - }); - final List list = - Steam.of(dataList).map(getterFunction).nonNull().toList(); - w.in(Lists.isNotEmpty(list), getterFunction, list); - }); - return wrapper; + /** + * in查询 + * + * @param wrapper 条件构造器 + * @param dataList 数据 + * @param 类型 + * @return 条件构造器 + */ + @SuppressWarnings("unchecked") + public static LambdaQueryWrapper multiIn(LambdaQueryWrapper wrapper, List dataList) { + if (Lists.isEmpty(dataList)) { + return wrapper; } + final Class entityClass = Database.getEntityClass(dataList); + final List fieldList = TableInfoHelper.getTableInfo(entityClass).getFieldList(); + multiOr( + wrapper, + fieldList, + (w, tableField) -> { + SFunction getterFunction = + (SFunction) + LAMBDA_GETTER_CACHE.computeIfAbsent( + entityClass + StringPool.AT + tableField.getProperty(), + property -> { + Method getter = + ReflectHelper.getMethod( + entityClass, + BeanHelper.GETTER_PREFIX + + tableField + .getProperty() + .substring(0, 1) + .toUpperCase(Locale.ROOT) + + tableField.getProperty().substring(1)); + return LambdaHelper.revert(SFunction.class, getter); + }); + final List list = Steam.of(dataList).map(getterFunction).nonNull().toList(); + w.in(Lists.isNotEmpty(list), getterFunction, list); + }); + return wrapper; + } - - /** - * or 查询 - * - * @param wrapper 条件构造器 - * @param dataList 数据 - * @param biConsumer 逻辑处理 - * @param 条件构造器 - * @param 实体类型 - * @param 数据类型 - * @return 条件构造器 - */ - public static , T, R> - W multiOr(W wrapper, Collection dataList, BiConsumer biConsumer) { - if (Lists.isEmpty(dataList)) { - return Database.notActive(wrapper); - } - return wrapper.nested(w -> dataList.forEach(data -> biConsumer.accept(w.or(), data))); + /** + * or 查询 + * + * @param wrapper 条件构造器 + * @param dataList 数据 + * @param biConsumer 逻辑处理 + * @param 条件构造器 + * @param 实体类型 + * @param 数据类型 + * @return 条件构造器 + */ + public static , T, R> W multiOr( + W wrapper, Collection dataList, BiConsumer biConsumer) { + if (Lists.isEmpty(dataList)) { + return Database.notActive(wrapper); } - + return wrapper.nested(w -> dataList.forEach(data -> biConsumer.accept(w.or(), data))); + } } diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/WrapperHelperTest.java b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/WrapperHelperTest.java index 2bfe92d9..475b5b20 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/WrapperHelperTest.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/WrapperHelperTest.java @@ -20,64 +20,69 @@ import java.util.Objects; @MybatisPlusTest class WrapperHelperTest { - @Test - void testMultiIn() { - LambdaQueryWrapper wrapper = - WrapperHelper.multiIn( - Wrappers.lambdaQuery(UserInfo.class), - Lists.of( - new UserInfo() { - { - setName("Jon"); - } - }, - new UserInfo() { - { - setEmail("test2@baomidou.com"); - } - }, - new UserInfo() { - { - setName("Tom"); - } - })); - // ==> Preparing: SELECT id,name,age,email,version,gmt_deleted FROM user_info WHERE gmt_deleted='2001-01-01 00:00:00' AND ((name IN (?,?) OR email IN (?))) - // ==> Parameters: Jon(String), Tom(String), test2@baomidou.com(String) - List userInfos = Database.list(wrapper); - Assertions.assertEquals("Jon", userInfos.get(0).getName()); - Assertions.assertEquals("test2@baomidou.com", userInfos.get(1).getEmail()); - Assertions.assertEquals("Tom", userInfos.get(2).getName()); - } + @Test + void testMultiIn() { + LambdaQueryWrapper wrapper = + WrapperHelper.multiIn( + Wrappers.lambdaQuery(UserInfo.class), + Lists.of( + new UserInfo() { + { + setName("Jon"); + } + }, + new UserInfo() { + { + setEmail("test2@baomidou.com"); + } + }, + new UserInfo() { + { + setName("Tom"); + } + })); + // ==> Preparing: SELECT id,name,age,email,version,gmt_deleted FROM user_info WHERE + // gmt_deleted='2001-01-01 00:00:00' AND ((name IN (?,?) OR email IN (?))) + // ==> Parameters: Jon(String), Tom(String), test2@baomidou.com(String) + List userInfos = Database.list(wrapper); + Assertions.assertEquals("Jon", userInfos.get(0).getName()); + Assertions.assertEquals("test2@baomidou.com", userInfos.get(1).getEmail()); + Assertions.assertEquals("Tom", userInfos.get(2).getName()); + } - @Test - void testMultiOr() { - val dataList = - Lists.of(new UserInfo() { - { - setName("Jon"); - } - }, - new UserInfo() { - { - setEmail("test2@baomidou.com"); - } - }, - new UserInfo() { - { - setName("Tom"); - } - }); - val wrapper = WrapperHelper.multiOr( - Wrappers.lambdaQuery(UserInfo.class), - dataList, (w, data) -> { - w.eq(Objects.nonNull(data.getEmail()), UserInfo::getEmail, data.getEmail()) - .eq(StringUtils.isNotBlank(data.getName()), UserInfo::getName, data.getName()); - }); - // ==> Preparing: SELECT id,name,age,email,version,gmt_deleted FROM user_info WHERE gmt_deleted='2001-01-01 00:00:00' AND ((name = ? OR email = ? OR name = ?)) - // ==> Parameters: Jon(String), test2@baomidou.com(String), Tom(String) - List userInfos = Database.list(wrapper); - Assertions.assertEquals("Jon", userInfos.get(0).getName()); - Assertions.assertEquals("test2@baomidou.com", userInfos.get(1).getEmail()); - Assertions.assertEquals("Tom", userInfos.get(2).getName()); - } + @Test + void testMultiOr() { + val dataList = + Lists.of( + new UserInfo() { + { + setName("Jon"); + } + }, + new UserInfo() { + { + setEmail("test2@baomidou.com"); + } + }, + new UserInfo() { + { + setName("Tom"); + } + }); + val wrapper = + WrapperHelper.multiOr( + Wrappers.lambdaQuery(UserInfo.class), + dataList, + (w, data) -> { + w.eq(Objects.nonNull(data.getEmail()), UserInfo::getEmail, data.getEmail()) + .eq(StringUtils.isNotBlank(data.getName()), UserInfo::getName, data.getName()); + }); + // ==> Preparing: SELECT id,name,age,email,version,gmt_deleted FROM user_info WHERE + // gmt_deleted='2001-01-01 00:00:00' AND ((name = ? OR email = ? OR name = ?)) + // ==> Parameters: Jon(String), test2@baomidou.com(String), Tom(String) + List userInfos = Database.list(wrapper); + Assertions.assertEquals("Jon", userInfos.get(0).getName()); + Assertions.assertEquals("test2@baomidou.com", userInfos.get(1).getEmail()); + Assertions.assertEquals("Tom", userInfos.get(2).getName()); + } } -- Gitee From ef0c1a17104642eedd3b0541266b887f85fe1fe2 Mon Sep 17 00:00:00 2001 From: KamTo Hung Date: Thu, 13 Apr 2023 18:55:31 +0800 Subject: [PATCH 4/8] feature(https://gitee.com/dromara/stream-query/issues/I6VGN0) --- .../engine/annotation/EnableMybatisPlusPlugin.java | 2 +- .../configuration/StreamScannerConfigurer.java | 14 ++++++++++---- .../configuration/StreamScannerRegistrar.java | 3 +-- .../mybatisplus/MybatisPlusTestApplication.java | 7 ++++--- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/annotation/EnableMybatisPlusPlugin.java b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/annotation/EnableMybatisPlusPlugin.java index 8c2803e0..a4456628 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/annotation/EnableMybatisPlusPlugin.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/annotation/EnableMybatisPlusPlugin.java @@ -73,6 +73,6 @@ public @interface EnableMybatisPlusPlugin { * * @return interface class for scanning */ - Class scanInterface() default Class.class; + Class interfaceClass() default Class.class; } diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerConfigurer.java b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerConfigurer.java index 96d5a3d1..99ec96a7 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerConfigurer.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerConfigurer.java @@ -18,9 +18,11 @@ package org.dromara.streamquery.stream.plugin.mybatisplus.engine.configuration; import org.dromara.streamquery.stream.core.clazz.ClassHelper; +import org.springframework.beans.factory.InitializingBean; import java.lang.annotation.Annotation; import java.util.Collection; +import java.util.HashSet; import java.util.Set; /** @@ -31,7 +33,7 @@ import java.util.Set; * * @author KamTo Hung */ -public class StreamScannerConfigurer { +public class StreamScannerConfigurer implements InitializingBean { /** * base package @@ -56,7 +58,7 @@ public class StreamScannerConfigurer { /** * entity class list */ - private Collection> entityClassList; + private final Set> entityClassList = new HashSet<>(); public void setBasePackages(Set basePackages) { this.basePackages = basePackages; @@ -86,12 +88,16 @@ public class StreamScannerConfigurer { /// 扫描po包下的所有类,作为entity Set basePackages = this.basePackages; for (String basePackage : basePackages) { - entityClassList.addAll(ClassHelper.scanClasses(basePackage)); + this.entityClassList.addAll(ClassHelper.scanClasses(basePackage)); } // 指定类 - entityClassList.addAll(classes); + this.entityClassList.addAll(this.classes); // TODO 注解的类 // TODO 实现接口的类 } + @Override + public void afterPropertiesSet() { + register(); + } } diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerRegistrar.java b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerRegistrar.java index 290211cd..559fe93b 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerRegistrar.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerRegistrar.java @@ -63,9 +63,8 @@ public class StreamScannerRegistrar implements ImportBeanDefinitionRegistrar { .collect(Collectors.toSet())); builder.addPropertyValue("basePackages", basePackages); - Set classes = Arrays.stream(annotationAttributes.getClassArray("classes")) + Set> classes = Arrays.stream(annotationAttributes.getClassArray("classes")) .filter(Objects::nonNull) - .map(ClassUtils::getPackageName) .collect(Collectors.toSet()); builder.addPropertyValue("classes", classes); diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/MybatisPlusTestApplication.java b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/MybatisPlusTestApplication.java index b09c87ef..060090d0 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/MybatisPlusTestApplication.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/MybatisPlusTestApplication.java @@ -34,9 +34,10 @@ import org.springframework.context.annotation.Bean; * @since 2022/5/21 */ @EnableMybatisPlusPlugin( - value = "org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po", - basePackages = "org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po", - basePackageClasses = {RoleInfo.class, UserInfo.class, UserRole.class}) + value = "org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po", + basePackages = "org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po", + basePackageClasses = {RoleInfo.class, UserInfo.class, UserRole.class}, + classes = {RoleInfo.class}) @SpringBootApplication public class MybatisPlusTestApplication { /** -- Gitee From 7328323562b6603827ad05eb37d29229341a6bf6 Mon Sep 17 00:00:00 2001 From: KamTo Hung Date: Fri, 14 Apr 2023 15:01:32 +0800 Subject: [PATCH 5/8] feature(#https://gitee.com/dromara/stream-query/issues/I6VGN0) --- pom.xml | 1 + .../annotation/EnableMybatisPlusPlugin.java | 4 +- .../configuration/StreamClassPathScanner.java | 110 ++++++++++++++++++ .../StreamPluginConfiguration.java | 5 +- .../StreamScannerConfigurer.java | 43 +++---- .../configuration/StreamScannerRegistrar.java | 37 +++--- .../MybatisPlusTestApplication.java | 4 + .../plugin/mybatisplus/annotation/Entity.java | 34 ++++++ .../mybatisplus/pojo/po/ParentScan.java | 7 ++ .../plugin/mybatisplus/pojo/po/RoleInfo.java | 2 + .../plugin/mybatisplus/pojo/po/UserInfo.java | 5 +- 11 files changed, 207 insertions(+), 45 deletions(-) create mode 100644 stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamClassPathScanner.java create mode 100644 stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/annotation/Entity.java create mode 100644 stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/ParentScan.java diff --git a/pom.xml b/pom.xml index f426cea5..e26276f7 100644 --- a/pom.xml +++ b/pom.xml @@ -27,6 +27,7 @@ 5.9.0 1.35 2.14.1 + 0.10.2 stream-query diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/annotation/EnableMybatisPlusPlugin.java b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/annotation/EnableMybatisPlusPlugin.java index a4456628..07ea557b 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/annotation/EnableMybatisPlusPlugin.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/annotation/EnableMybatisPlusPlugin.java @@ -62,14 +62,14 @@ public @interface EnableMybatisPlusPlugin { Class[] classes() default {}; /** - * Alias for {@link #basePackages()}. scan annotation classes + * Base on {@link #basePackages()}. scan annotation classes * * @return annotation class for scanning */ Class annotation() default Annotation.class; /** - * Alias for {@link #basePackages()}. scan interface classes + * Base on {@link #basePackages()}. scan interface classes * * @return interface class for scanning */ diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamClassPathScanner.java b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamClassPathScanner.java new file mode 100644 index 00000000..eed84877 --- /dev/null +++ b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamClassPathScanner.java @@ -0,0 +1,110 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.streamquery.stream.plugin.mybatisplus.engine.configuration; + +import org.apache.ibatis.logging.Log; +import org.apache.ibatis.logging.LogFactory; +import org.dromara.streamquery.stream.core.reflect.ReflectHelper; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; +import org.springframework.core.type.filter.AnnotationTypeFilter; +import org.springframework.core.type.filter.AssignableTypeFilter; +import org.springframework.util.CollectionUtils; + +import java.lang.annotation.Annotation; +import java.util.Collection; +import java.util.Collections; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * @author KamTo Hung + */ +public class StreamClassPathScanner extends ClassPathScanningCandidateComponentProvider { + + private static final Log LOG = LogFactory.getLog(StreamClassPathScanner.class); + + /** + * annotation + */ + private Class annotation; + + /** + * scan interface + */ + private Class interfaceClass; + + public StreamClassPathScanner(boolean useDefaultFilters) { + super(useDefaultFilters); + } + + public void setAnnotation(Class annotation) { + this.annotation = annotation; + } + + + public void setInterfaceClass(Class interfaceClass) { + this.interfaceClass = interfaceClass; + } + + public void registerFilters() { + boolean acceptAllInterfaces = true; + + if (this.annotation != null) { + addIncludeFilter(new AnnotationTypeFilter(this.annotation)); + acceptAllInterfaces = false; + } + + if (this.interfaceClass != null) { + addIncludeFilter(new AssignableTypeFilter(this.interfaceClass) { + // remove parent entity + @Override + protected boolean matchClassName(String className) { + return false; + } + }); + acceptAllInterfaces = false; + } + + if (acceptAllInterfaces) { + // default include filter that accepts all classes + addIncludeFilter((metadataReader, metadataReaderFactory) -> true); + } + + // exclude package-info.java + addExcludeFilter((metadataReader, metadataReaderFactory) -> { + String className = metadataReader.getClassMetadata().getClassName(); + return className.endsWith("package-info"); + }); + } + + public Set> scan(Set basePackages) { + if (CollectionUtils.isEmpty(basePackages)) { + LOG.warn("basePackages is empty"); + return Collections.emptySet(); + } + return basePackages.stream() + .map(this::findCandidateComponents) + .flatMap(Collection::stream) + .map(BeanDefinition::getBeanClassName) + .filter(Objects::nonNull) + .map(ReflectHelper::forClassName) + .collect(Collectors.toSet()); + } + +} diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamPluginConfiguration.java b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamPluginConfiguration.java index 510b9ac8..4e5bf9bf 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamPluginConfiguration.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamPluginConfiguration.java @@ -24,7 +24,6 @@ import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.baomidou.mybatisplus.core.toolkit.ReflectionKit; import org.apache.ibatis.builder.MapperBuilderAssistant; import org.apache.ibatis.session.SqlSessionFactory; -import org.dromara.streamquery.stream.core.clazz.ClassHelper; import org.dromara.streamquery.stream.core.lambda.LambdaHelper; import org.dromara.streamquery.stream.core.reflect.ReflectHelper; import org.dromara.streamquery.stream.plugin.mybatisplus.Database; @@ -36,9 +35,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.context.annotation.Bean; import org.springframework.core.annotation.Order; -import java.util.ArrayList; import java.util.List; -import java.util.Set; /** * MPSql注入 @@ -92,6 +89,6 @@ public class StreamPluginConfiguration { @ConditionalOnMissingBean(DynamicMapperHandler.class) public DynamicMapperHandler dynamicMapperHandler( SqlSessionFactory sqlSessionFactory, StreamScannerConfigurer streamScannerConfigurer) { - return new DynamicMapperHandler(sqlSessionFactory, streamScannerConfigurer.getEntityClassList()); + return new DynamicMapperHandler(sqlSessionFactory, streamScannerConfigurer.getEntityClasses()); } } diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerConfigurer.java b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerConfigurer.java index 99ec96a7..313fd789 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerConfigurer.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerConfigurer.java @@ -17,8 +17,10 @@ package org.dromara.streamquery.stream.plugin.mybatisplus.engine.configuration; -import org.dromara.streamquery.stream.core.clazz.ClassHelper; -import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.util.CollectionUtils; import java.lang.annotation.Annotation; import java.util.Collection; @@ -33,7 +35,7 @@ import java.util.Set; * * @author KamTo Hung */ -public class StreamScannerConfigurer implements InitializingBean { +public class StreamScannerConfigurer implements BeanFactoryPostProcessor { /** * base package @@ -55,6 +57,7 @@ public class StreamScannerConfigurer implements InitializingBean { */ private Class interfaceClass; + /** * entity class list */ @@ -64,10 +67,6 @@ public class StreamScannerConfigurer implements InitializingBean { this.basePackages = basePackages; } - public Set> getClasses() { - return classes; - } - public void setClasses(Set> classes) { this.classes = classes; } @@ -80,24 +79,26 @@ public class StreamScannerConfigurer implements InitializingBean { this.interfaceClass = interfaceClass; } - public Collection> getEntityClassList() { - return entityClassList; + private void registerEntityClasses(Collection> entityClasses) { + if (!CollectionUtils.isEmpty(entityClasses)) { + this.entityClassList.addAll(entityClasses); + } } - public void register() { - /// 扫描po包下的所有类,作为entity - Set basePackages = this.basePackages; - for (String basePackage : basePackages) { - this.entityClassList.addAll(ClassHelper.scanClasses(basePackage)); - } - // 指定类 - this.entityClassList.addAll(this.classes); - // TODO 注解的类 - // TODO 实现接口的类 + public Collection> getEntityClasses() { + return entityClassList; } @Override - public void afterPropertiesSet() { - register(); + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + // 指定类 + registerEntityClasses(this.classes); + StreamClassPathScanner scanner = new StreamClassPathScanner(false); + scanner.setAnnotation(this.annotation); + scanner.setInterfaceClass(this.interfaceClass); + scanner.registerFilters(); + Set> classSet = scanner.scan(this.basePackages); + registerEntityClasses(classSet); } + } diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerRegistrar.java b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerRegistrar.java index 559fe93b..ba8f9c24 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerRegistrar.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/engine/configuration/StreamScannerRegistrar.java @@ -32,35 +32,39 @@ import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; -/** @author KamTo Hung */ +/** + * Bean definition registrar for {@link StreamScannerConfigurer}. + * + * @author KamTo Hung + */ public class StreamScannerRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions( - AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { + AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { AnnotationAttributes annotationAttributes = - AnnotationAttributes.fromMap( - importingClassMetadata.getAnnotationAttributes( - EnableMybatisPlusPlugin.class.getName())); + AnnotationAttributes.fromMap( + importingClassMetadata.getAnnotationAttributes( + EnableMybatisPlusPlugin.class.getName())); if (Objects.isNull(annotationAttributes)) { return; } BeanDefinitionBuilder builder = - BeanDefinitionBuilder.genericBeanDefinition(StreamScannerConfigurer.class); + BeanDefinitionBuilder.genericBeanDefinition(StreamScannerConfigurer.class); Set basePackages = new HashSet<>(); basePackages.addAll( - Arrays.stream(annotationAttributes.getStringArray("value")) - .filter(StringUtils::hasText) - .collect(Collectors.toSet())); + Arrays.stream(annotationAttributes.getStringArray("value")) + .filter(StringUtils::hasText) + .collect(Collectors.toSet())); basePackages.addAll( - Arrays.stream(annotationAttributes.getStringArray("basePackages")) - .filter(StringUtils::hasText) - .collect(Collectors.toSet())); + Arrays.stream(annotationAttributes.getStringArray("basePackages")) + .filter(StringUtils::hasText) + .collect(Collectors.toSet())); basePackages.addAll( - Arrays.stream(annotationAttributes.getClassArray("basePackageClasses")) - .filter(Objects::nonNull) - .map(ClassUtils::getPackageName) - .collect(Collectors.toSet())); + Arrays.stream(annotationAttributes.getClassArray("basePackageClasses")) + .filter(Objects::nonNull) + .map(ClassUtils::getPackageName) + .collect(Collectors.toSet())); builder.addPropertyValue("basePackages", basePackages); Set> classes = Arrays.stream(annotationAttributes.getClassArray("classes")) @@ -80,4 +84,5 @@ public class StreamScannerRegistrar implements ImportBeanDefinitionRegistrar { registry.registerBeanDefinition("streamScannerConfigurer", builder.getBeanDefinition()); } + } diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/MybatisPlusTestApplication.java b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/MybatisPlusTestApplication.java index 060090d0..3f1eb123 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/MybatisPlusTestApplication.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/MybatisPlusTestApplication.java @@ -21,6 +21,8 @@ import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.dromara.streamquery.stream.plugin.mybatisplus.engine.annotation.EnableMybatisPlusPlugin; +import org.dromara.streamquery.stream.plugin.mybatisplus.annotation.Entity; +import org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po.ParentScan; import org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po.RoleInfo; import org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po.UserInfo; import org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po.UserRole; @@ -37,6 +39,8 @@ import org.springframework.context.annotation.Bean; value = "org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po", basePackages = "org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po", basePackageClasses = {RoleInfo.class, UserInfo.class, UserRole.class}, + annotation = Entity.class, + interfaceClass = ParentScan.class, classes = {RoleInfo.class}) @SpringBootApplication public class MybatisPlusTestApplication { diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/annotation/Entity.java b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/annotation/Entity.java new file mode 100644 index 00000000..79bd8751 --- /dev/null +++ b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/annotation/Entity.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.streamquery.stream.plugin.mybatisplus.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author KamTo Hung + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE}) +@Documented +@Inherited +public @interface Entity { +} diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/ParentScan.java b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/ParentScan.java new file mode 100644 index 00000000..974b4160 --- /dev/null +++ b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/ParentScan.java @@ -0,0 +1,7 @@ +package org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po; + +/** + * @author KamTo Hung + */ +public interface ParentScan { +} diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/RoleInfo.java b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/RoleInfo.java index 82283036..b5feb3a2 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/RoleInfo.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/RoleInfo.java @@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; +import org.dromara.streamquery.stream.plugin.mybatisplus.annotation.Entity; /** * RoleInfo @@ -29,6 +30,7 @@ import lombok.Data; * @since 2022/5/23 */ @Data +@Entity @KeySequence(dbType = DbType.H2) public class RoleInfo { diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/UserInfo.java b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/UserInfo.java index 44bb68c8..8b47d074 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/UserInfo.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/UserInfo.java @@ -31,7 +31,7 @@ import java.time.LocalDateTime; * @since 2022/5/21 */ @Data -public class UserInfo { +public class UserInfo implements ParentScan { private static final long serialVersionUID = -7219188882388819210L; @@ -41,7 +41,8 @@ public class UserInfo { private String name; private Integer age; private String email; - @Version private Integer version; + @Version + private Integer version; @TableLogic(value = "'2001-01-01 00:00:00'", delval = "NOW()") private LocalDateTime gmtDeleted; -- Gitee From e1c8ae70f302b1532bfa08ea8563d6813071af58 Mon Sep 17 00:00:00 2001 From: KamTo Hung Date: Fri, 14 Apr 2023 15:06:10 +0800 Subject: [PATCH 6/8] feature(#https://gitee.com/dromara/stream-query/issues/I6VGN0) --- .../plugin/mybatisplus/pojo/po/ParentScan.java | 16 ++++++++++++++++ .../mybatisplus/pojo/po/package-info.java | 17 +++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/package-info.java diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/ParentScan.java b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/ParentScan.java index 974b4160..4d7a5a66 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/ParentScan.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/ParentScan.java @@ -1,3 +1,19 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po; /** diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/package-info.java b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/package-info.java new file mode 100644 index 00000000..adf5fdf9 --- /dev/null +++ b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/package-info.java @@ -0,0 +1,17 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po; \ No newline at end of file -- Gitee From 5bf3dfd589de2e93bfc958b5cb2d3a3caa1de980 Mon Sep 17 00:00:00 2001 From: KamTo Hung Date: Fri, 14 Apr 2023 15:16:22 +0800 Subject: [PATCH 7/8] feature(#https://gitee.com/dromara/stream-query/issues/I6VGN0) --- .../stream/plugin/mybatisplus/MybatisPlusTestApplication.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/MybatisPlusTestApplication.java b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/MybatisPlusTestApplication.java index 3f1eb123..cdfb4897 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/MybatisPlusTestApplication.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/MybatisPlusTestApplication.java @@ -36,8 +36,8 @@ import org.springframework.context.annotation.Bean; * @since 2022/5/21 */ @EnableMybatisPlusPlugin( - value = "org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po", - basePackages = "org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po", +// value = "org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po", + basePackages = "org.dromara.streamquery.stream.plugin.*.pojo.po", basePackageClasses = {RoleInfo.class, UserInfo.class, UserRole.class}, annotation = Entity.class, interfaceClass = ParentScan.class, -- Gitee From 2c65cc4791baea5485b58c75d9fe270d0a54e1d7 Mon Sep 17 00:00:00 2001 From: KamTo Hung Date: Fri, 14 Apr 2023 15:18:46 +0800 Subject: [PATCH 8/8] feature(#https://gitee.com/dromara/stream-query/issues/I6VGN0) --- .../pojo/po/inner/AddressInfo.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/inner/AddressInfo.java diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/inner/AddressInfo.java b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/inner/AddressInfo.java new file mode 100644 index 00000000..927f2ec7 --- /dev/null +++ b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/pojo/po/inner/AddressInfo.java @@ -0,0 +1,20 @@ +package org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po.inner; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import org.dromara.streamquery.stream.plugin.mybatisplus.annotation.Entity; + +/** + * @author KamTo Hung + */ +@Data +@Entity +public class AddressInfo { + + @TableId(type = IdType.ASSIGN_ID) + private String id; + + private String address; + +} -- Gitee