Browse Source

自定义注入器获取注入方法暴露参数 mapperClass

hubin 6 years ago
parent
commit
1d87d22c22

+ 15 - 11
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/AbstractSqlInjector.java

@@ -15,15 +15,6 @@
  */
 package com.baomidou.mybatisplus.core.injector;
 
-import com.baomidou.mybatisplus.core.metadata.TableInfo;
-import com.baomidou.mybatisplus.core.parser.SqlParserHelper;
-import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
-import com.baomidou.mybatisplus.core.toolkit.Assert;
-import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
-import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
-import org.apache.ibatis.builder.MapperBuilderAssistant;
-import org.apache.ibatis.session.Configuration;
-
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
@@ -31,6 +22,16 @@ import java.lang.reflect.WildcardType;
 import java.util.List;
 import java.util.Set;
 
+import org.apache.ibatis.builder.MapperBuilderAssistant;
+import org.apache.ibatis.session.Configuration;
+
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import com.baomidou.mybatisplus.core.parser.SqlParserHelper;
+import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
+import com.baomidou.mybatisplus.core.toolkit.Assert;
+import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
+import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
+
 
 /**
  * SQL 自动注入器
@@ -45,7 +46,7 @@ public abstract class AbstractSqlInjector implements ISqlInjector {
         String className = mapperClass.toString();
         Set<String> mapperRegistryCache = GlobalConfigUtils.getMapperRegistryCache(builderAssistant.getConfiguration());
         if (!mapperRegistryCache.contains(className)) {
-            List<AbstractMethod> methodList = this.getMethodList();
+            List<AbstractMethod> methodList = this.getMethodList(mapperClass);
             Assert.notEmpty(methodList, "No effective injection method was found.");
             // 循环注入自定义方法
             Class<?> modelClass = extractModelClass(mapperClass);
@@ -69,11 +70,14 @@ public abstract class AbstractSqlInjector implements ISqlInjector {
     }
 
     /**
+     * <p>
      * 获取 注入的方法
+     * </p>
      *
+     * @param mapperClass mapper class
      * @return 注入的方法集合
      */
-    public abstract List<AbstractMethod> getMethodList();
+    public abstract List<AbstractMethod> getMethodList(Class<?> mapperClass);
 
     /**
      * 提取泛型模型,多泛型的时候请将泛型T放在第一位

+ 19 - 3
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/DefaultSqlInjector.java

@@ -15,12 +15,28 @@
  */
 package com.baomidou.mybatisplus.core.injector;
 
-import com.baomidou.mybatisplus.core.injector.methods.*;
+import static java.util.stream.Collectors.toList;
 
 import java.util.List;
 import java.util.stream.Stream;
 
-import static java.util.stream.Collectors.toList;
+import com.baomidou.mybatisplus.core.injector.methods.Delete;
+import com.baomidou.mybatisplus.core.injector.methods.DeleteBatchByIds;
+import com.baomidou.mybatisplus.core.injector.methods.DeleteById;
+import com.baomidou.mybatisplus.core.injector.methods.DeleteByMap;
+import com.baomidou.mybatisplus.core.injector.methods.Insert;
+import com.baomidou.mybatisplus.core.injector.methods.SelectBatchByIds;
+import com.baomidou.mybatisplus.core.injector.methods.SelectById;
+import com.baomidou.mybatisplus.core.injector.methods.SelectByMap;
+import com.baomidou.mybatisplus.core.injector.methods.SelectCount;
+import com.baomidou.mybatisplus.core.injector.methods.SelectList;
+import com.baomidou.mybatisplus.core.injector.methods.SelectMaps;
+import com.baomidou.mybatisplus.core.injector.methods.SelectMapsPage;
+import com.baomidou.mybatisplus.core.injector.methods.SelectObjs;
+import com.baomidou.mybatisplus.core.injector.methods.SelectOne;
+import com.baomidou.mybatisplus.core.injector.methods.SelectPage;
+import com.baomidou.mybatisplus.core.injector.methods.Update;
+import com.baomidou.mybatisplus.core.injector.methods.UpdateById;
 
 
 /**
@@ -32,7 +48,7 @@ import static java.util.stream.Collectors.toList;
 public class DefaultSqlInjector extends AbstractSqlInjector {
 
     @Override
-    public List<AbstractMethod> getMethodList() {
+    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
         return Stream.of(
             new Insert(),
             new Delete(),

+ 21 - 6
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/LogicSqlInjector.java

@@ -15,15 +15,30 @@
  */
 package com.baomidou.mybatisplus.extension.injector;
 
-import com.baomidou.mybatisplus.core.injector.AbstractMethod;
-import com.baomidou.mybatisplus.core.injector.AbstractSqlInjector;
-import com.baomidou.mybatisplus.core.injector.methods.Insert;
-import com.baomidou.mybatisplus.extension.injector.methods.*;
+import static java.util.stream.Collectors.toList;
 
 import java.util.List;
 import java.util.stream.Stream;
 
-import static java.util.stream.Collectors.toList;
+import com.baomidou.mybatisplus.core.injector.AbstractMethod;
+import com.baomidou.mybatisplus.core.injector.AbstractSqlInjector;
+import com.baomidou.mybatisplus.core.injector.methods.Insert;
+import com.baomidou.mybatisplus.extension.injector.methods.LogicDelete;
+import com.baomidou.mybatisplus.extension.injector.methods.LogicDeleteBatchByIds;
+import com.baomidou.mybatisplus.extension.injector.methods.LogicDeleteById;
+import com.baomidou.mybatisplus.extension.injector.methods.LogicDeleteByMap;
+import com.baomidou.mybatisplus.extension.injector.methods.LogicSelectBatchByIds;
+import com.baomidou.mybatisplus.extension.injector.methods.LogicSelectById;
+import com.baomidou.mybatisplus.extension.injector.methods.LogicSelectByMap;
+import com.baomidou.mybatisplus.extension.injector.methods.LogicSelectCount;
+import com.baomidou.mybatisplus.extension.injector.methods.LogicSelectList;
+import com.baomidou.mybatisplus.extension.injector.methods.LogicSelectMaps;
+import com.baomidou.mybatisplus.extension.injector.methods.LogicSelectMapsPage;
+import com.baomidou.mybatisplus.extension.injector.methods.LogicSelectObjs;
+import com.baomidou.mybatisplus.extension.injector.methods.LogicSelectOne;
+import com.baomidou.mybatisplus.extension.injector.methods.LogicSelectPage;
+import com.baomidou.mybatisplus.extension.injector.methods.LogicUpdate;
+import com.baomidou.mybatisplus.extension.injector.methods.LogicUpdateById;
 
 /**
  * SQL 逻辑删除注入器
@@ -34,7 +49,7 @@ import static java.util.stream.Collectors.toList;
 public class LogicSqlInjector extends AbstractSqlInjector {
 
     @Override
-    public List<AbstractMethod> getMethodList() {
+    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
         return Stream.of(
             new Insert(),
             new LogicDelete(),

+ 15 - 12
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/mysql/config/MybatisPlusConfig.java

@@ -15,6 +15,18 @@
  */
 package com.baomidou.mybatisplus.test.mysql.config;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.sql.DataSource;
+
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.apache.ibatis.type.JdbcType;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.core.MybatisConfiguration;
 import com.baomidou.mybatisplus.core.config.GlobalConfig;
@@ -29,18 +41,9 @@ import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler;
 import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
 import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
 import com.baomidou.mybatisplus.test.mysql.MysqlMetaObjectHandler;
+
 import net.sf.jsqlparser.expression.Expression;
 import net.sf.jsqlparser.expression.LongValue;
-import org.apache.ibatis.session.SqlSessionFactory;
-import org.apache.ibatis.type.JdbcType;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
-
-import javax.sql.DataSource;
-import java.util.ArrayList;
-import java.util.List;
 
 /**
  * Mybatis Plus Config
@@ -90,8 +93,8 @@ public class MybatisPlusConfig {
              * 注入自定义全局方法
              */
             @Override
-            public List<AbstractMethod> getMethodList() {
-                List<AbstractMethod> methodList = super.getMethodList();
+            public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
+                List<AbstractMethod> methodList = super.getMethodList(mapperClass);
                 methodList.add(new LogicDeleteByIdWithFill());
                 methodList.add(new InsertBatchSomeColumn(t -> !(t.getFieldFill() == FieldFill.UPDATE
                     || t.isLogicDelete() || t.getProperty().equals("version"))));