miemie пре 5 година
родитељ
комит
4a4098ae7d
13 измењених фајлова са 92 додато и 94 уклоњено
  1. 11 10
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractLambdaWrapper.java
  2. 13 11
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java
  3. 16 13
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/query/LambdaQueryWrapper.java
  4. 6 4
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/query/Query.java
  5. 6 11
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/query/QueryWrapper.java
  6. 13 4
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/LambdaUpdateWrapper.java
  7. 5 5
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/UpdateWrapper.java
  8. 11 6
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/Wrappers.java
  9. 0 6
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/query/LambdaQueryChainWrapper.java
  10. 0 6
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/query/QueryChainWrapper.java
  11. 6 7
      mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/AbstractKtWrapper.kt
  12. 3 8
      mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtQueryWrapper.kt
  13. 2 3
      mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtUpdateWrapper.kt

+ 11 - 10
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractLambdaWrapper.java

@@ -43,15 +43,6 @@ public abstract class AbstractLambdaWrapper<T, Children extends AbstractLambdaWr
     private Map<String, ColumnCache> columnMap = null;
     private boolean initColumnMap = false;
 
-    @Override
-    protected void initEntityClass() {
-        super.initEntityClass();
-        if (entityClass != null) {
-            columnMap = LambdaUtils.getColumnMap(entityClass);
-            initColumnMap = true;
-        }
-    }
-
     @SuppressWarnings("unchecked")
     @Override
     protected String columnsToString(SFunction<T, ?>... columns) {
@@ -86,7 +77,7 @@ public abstract class AbstractLambdaWrapper<T, Children extends AbstractLambdaWr
      */
     private String getColumn(SerializedLambda lambda, boolean onlyColumn) throws MybatisPlusException {
         String fieldName = PropertyNamer.methodToProperty(lambda.getImplMethodName());
-        Class aClass = lambda.getInstantiatedType();
+        Class<?> aClass = lambda.getInstantiatedType();
         if (!initColumnMap) {
             columnMap = LambdaUtils.getColumnMap(aClass);
         }
@@ -96,4 +87,14 @@ public abstract class AbstractLambdaWrapper<T, Children extends AbstractLambdaWr
             fieldName, aClass.getName());
         return onlyColumn ? columnCache.getColumn() : columnCache.getColumnSelect();
     }
+
+    @Override
+    protected void initNeed() {
+        super.initNeed();
+        final Class<T> entityClass = getEntityClass();
+        if (entityClass != null) {
+            initColumnMap = true;
+            columnMap = LambdaUtils.getColumnMap(entityClass);
+        }
+    }
 }

+ 13 - 11
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java

@@ -65,12 +65,12 @@ public abstract class AbstractWrapper<T, R, Children extends AbstractWrapper<T,
     /**
      * 数据库表映射实体类
      */
-    protected T entity;
+    private T entity;
     protected MergeSegments expression;
     /**
-     * 实体类型
+     * 实体类型(主要用于确定泛型以及取TableInfo缓存)
      */
-    protected Class<T> entityClass;
+    private Class<T> entityClass;
 
     @Override
     public T getEntity() {
@@ -79,19 +79,21 @@ public abstract class AbstractWrapper<T, R, Children extends AbstractWrapper<T,
 
     public Children setEntity(T entity) {
         this.entity = entity;
-        this.initEntityClass();
         return typedThis;
     }
 
-    protected void initEntityClass() {
-        if (this.entityClass == null && this.entity != null) {
-            this.entityClass = (Class<T>) entity.getClass();
+    protected Class<T> getEntityClass() {
+        if (entityClass == null && entity != null) {
+            entityClass = (Class<T>) entity.getClass();
         }
+        return entityClass;
     }
 
-    protected Class<T> getCheckEntityClass() {
-        Assert.notNull(entityClass, "entityClass must not null,please set entity before use this method!");
-        return entityClass;
+    public Children setEntityClass(Class<T> entityClass) {
+        if (entityClass != null) {
+            this.entityClass = entityClass;
+        }
+        return typedThis;
     }
 
     @Override
@@ -405,7 +407,7 @@ public abstract class AbstractWrapper<T, R, Children extends AbstractWrapper<T,
     /**
      * 必要的初始化
      */
-    protected final void initNeed() {
+    protected void initNeed() {
         paramNameSeq = new AtomicInteger(0);
         paramNameValuePairs = new HashMap<>(16);
         expression = new MergeSegments();

+ 16 - 13
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/query/LambdaQueryWrapper.java

@@ -46,15 +46,23 @@ public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryW
      * 不建议直接 new 该实例,使用 Wrappers.lambdaQuery(entity)
      */
     public LambdaQueryWrapper() {
-        this(null);
+        this((T) null);
     }
 
     /**
      * 不建议直接 new 该实例,使用 Wrappers.lambdaQuery(entity)
      */
     public LambdaQueryWrapper(T entity) {
-        super.setEntity(entity);
-        super.initNeed();
+        this.setEntity(entity);
+        this.initNeed();
+    }
+
+    /**
+     * 不建议直接 new 该实例,使用 Wrappers.lambdaQuery(entity)
+     */
+    public LambdaQueryWrapper(Class<T> entityClass) {
+        this.setEntityClass(entityClass);
+        this.initNeed();
     }
 
     /**
@@ -63,12 +71,12 @@ public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryW
     LambdaQueryWrapper(T entity, Class<T> entityClass, SharedString sqlSelect, AtomicInteger paramNameSeq,
                        Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
                        SharedString lastSql, SharedString sqlComment) {
-        super.setEntity(entity);
+        this.setEntity(entity);
+        this.setEntityClass(entityClass);
         this.paramNameSeq = paramNameSeq;
         this.paramNameValuePairs = paramNameValuePairs;
         this.expression = mergeSegments;
         this.sqlSelect = sqlSelect;
-        this.entityClass = entityClass;
         this.lastSql = lastSql;
         this.sqlComment = sqlComment;
     }
@@ -87,11 +95,6 @@ public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryW
         return typedThis;
     }
 
-    @Override
-    public LambdaQueryWrapper<T> select(Predicate<TableFieldInfo> predicate) {
-        return select(entityClass, predicate);
-    }
-
     /**
      * 过滤查询的字段信息(主键除外!)
      * <p>例1: 只要 java 字段名以 "test" 开头的             -> select(i -&gt; i.getProperty().startsWith("test"))</p>
@@ -105,8 +108,8 @@ public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryW
      */
     @Override
     public LambdaQueryWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
-        this.entityClass = entityClass;
-        this.sqlSelect.setStringValue(TableInfoHelper.getTableInfo(getCheckEntityClass()).chooseSelect(predicate));
+        this.setEntityClass(entityClass);
+        this.sqlSelect.setStringValue(TableInfoHelper.getTableInfo(getEntityClass()).chooseSelect(predicate));
         return typedThis;
     }
 
@@ -121,7 +124,7 @@ public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryW
      */
     @Override
     protected LambdaQueryWrapper<T> instance() {
-        return new LambdaQueryWrapper<>(entity, entityClass, null, paramNameSeq, paramNameValuePairs,
+        return new LambdaQueryWrapper<>(getEntity(), getEntityClass(), null, paramNameSeq, paramNameValuePairs,
             new MergeSegments(), SharedString.emptyString(), SharedString.emptyString());
     }
 }

+ 6 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/query/Query.java

@@ -15,11 +15,11 @@
  */
 package com.baomidou.mybatisplus.core.conditions.query;
 
+import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
+
 import java.io.Serializable;
 import java.util.function.Predicate;
 
-import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
-
 /**
  * @author miemie
  * @since 2018-12-12
@@ -33,13 +33,15 @@ public interface Query<Children, T, R> extends Serializable {
      * @return children
      */
     @SuppressWarnings("unchecked")
-	Children select(R... columns);
+    Children select(R... columns);
 
     /**
      * ignore
      * <p>注意只有内部有 entity 才能使用该方法</p>
      */
-    Children select(Predicate<TableFieldInfo> predicate);
+    default Children select(Predicate<TableFieldInfo> predicate) {
+        return select(null, predicate);
+    }
 
     /**
      * 过滤查询的字段信息(主键除外!)

+ 6 - 11
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/query/QueryWrapper.java

@@ -65,8 +65,8 @@ public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
     private QueryWrapper(T entity, Class<T> entityClass, AtomicInteger paramNameSeq,
                          Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
                          SharedString lastSql, SharedString sqlComment) {
-        super.setEntity(entity);
-        this.entityClass = entityClass;
+        this.setEntity(entity);
+        this.setEntityClass(entityClass);
         this.paramNameSeq = paramNameSeq;
         this.paramNameValuePairs = paramNameValuePairs;
         this.expression = mergeSegments;
@@ -82,15 +82,10 @@ public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
         return typedThis;
     }
 
-    @Override
-    public QueryWrapper<T> select(Predicate<TableFieldInfo> predicate) {
-        return select(entityClass, predicate);
-    }
-
     @Override
     public QueryWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
-        this.entityClass = entityClass;
-        this.sqlSelect.setStringValue(TableInfoHelper.getTableInfo(getCheckEntityClass()).chooseSelect(predicate));
+        this.setEntityClass(entityClass);
+        this.sqlSelect.setStringValue(TableInfoHelper.getTableInfo(getEntityClass()).chooseSelect(predicate));
         return typedThis;
     }
 
@@ -103,7 +98,7 @@ public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
      * 返回一个支持 lambda 函数写法的 wrapper
      */
     public LambdaQueryWrapper<T> lambda() {
-        return new LambdaQueryWrapper<>(entity, entityClass, sqlSelect, paramNameSeq, paramNameValuePairs, expression,
+        return new LambdaQueryWrapper<>(getEntity(), getEntityClass(), sqlSelect, paramNameSeq, paramNameValuePairs, expression,
             lastSql, sqlComment);
     }
 
@@ -115,7 +110,7 @@ public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
      */
     @Override
     protected QueryWrapper<T> instance() {
-        return new QueryWrapper<>(entity, entityClass, paramNameSeq, paramNameValuePairs, new MergeSegments(),
+        return new QueryWrapper<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs, new MergeSegments(),
             SharedString.emptyString(), SharedString.emptyString());
     }
 }

+ 13 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/LambdaUpdateWrapper.java

@@ -48,15 +48,24 @@ public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdat
      */
     public LambdaUpdateWrapper() {
         // 如果无参构造函数,请注意实体 NULL 情况 SET 必须有否则 SQL 异常
-        this(null);
+        this((T) null);
     }
 
     /**
      * 不建议直接 new 该实例,使用 Wrappers.lambdaUpdate(entity)
      */
     public LambdaUpdateWrapper(T entity) {
-        super.setEntity(entity);
-        super.initNeed();
+        this.setEntity(entity);
+        this.initNeed();
+        this.sqlSet = new ArrayList<>();
+    }
+
+    /**
+     * 不建议直接 new 该实例,使用 Wrappers.lambdaUpdate(entity)
+     */
+    public LambdaUpdateWrapper(Class<T> entityClass) {
+        this.setEntityClass(entityClass);
+        this.initNeed();
         this.sqlSet = new ArrayList<>();
     }
 
@@ -101,7 +110,7 @@ public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdat
 
     @Override
     protected LambdaUpdateWrapper<T> instance() {
-        return new LambdaUpdateWrapper<>(entity, sqlSet, paramNameSeq, paramNameValuePairs, new MergeSegments(),
+        return new LambdaUpdateWrapper<>(getEntity(), sqlSet, paramNameSeq, paramNameValuePairs, new MergeSegments(),
             SharedString.emptyString(), SharedString.emptyString());
     }
 }

+ 5 - 5
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/UpdateWrapper.java

@@ -48,15 +48,15 @@ public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T
     }
 
     public UpdateWrapper(T entity) {
-        super.setEntity(entity);
-        super.initNeed();
+        this.setEntity(entity);
+        this.initNeed();
         this.sqlSet = new ArrayList<>();
     }
 
     private UpdateWrapper(T entity, List<String> sqlSet, AtomicInteger paramNameSeq,
                           Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
                           SharedString lastSql, SharedString sqlComment) {
-        super.setEntity(entity);
+        this.setEntity(entity);
         this.sqlSet = sqlSet;
         this.paramNameSeq = paramNameSeq;
         this.paramNameValuePairs = paramNameValuePairs;
@@ -93,12 +93,12 @@ public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T
      * 返回一个支持 lambda 函数写法的 wrapper
      */
     public LambdaUpdateWrapper<T> lambda() {
-        return new LambdaUpdateWrapper<>(entity, sqlSet, paramNameSeq, paramNameValuePairs, expression, lastSql, sqlComment);
+        return new LambdaUpdateWrapper<>(getEntity(), sqlSet, paramNameSeq, paramNameValuePairs, expression, lastSql, sqlComment);
     }
 
     @Override
     protected UpdateWrapper<T> instance() {
-        return new UpdateWrapper<>(entity, sqlSet, paramNameSeq, paramNameValuePairs, new MergeSegments(),
+        return new UpdateWrapper<>(getEntity(), sqlSet, paramNameSeq, paramNameValuePairs, new MergeSegments(),
             SharedString.emptyString(), SharedString.emptyString());
     }
 }

+ 11 - 6
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/Wrappers.java

@@ -157,6 +157,16 @@ public final class Wrappers {
             throw new UnsupportedOperationException();
         }
 
+        @Override
+        public QueryWrapper<T> setEntityClass(Class<T> entityClass) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        protected Class<T> getEntityClass() {
+            return null;
+        }
+
         @Override
         public String getSqlSelect() {
             return null;
@@ -188,12 +198,7 @@ public final class Wrappers {
         }
 
         @Override
-        protected void initEntityClass() {
-        }
-
-        @Override
-        protected Class<T> getCheckEntityClass() {
-            throw new UnsupportedOperationException();
+        protected void initNeed() {
         }
 
         @Override

+ 0 - 6
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/query/LambdaQueryChainWrapper.java

@@ -48,12 +48,6 @@ public class LambdaQueryChainWrapper<T> extends AbstractChainWrapper<T, SFunctio
         return typedThis;
     }
 
-    @Override
-    public LambdaQueryChainWrapper<T> select(Predicate<TableFieldInfo> predicate) {
-        wrapperChildren.select(predicate);
-        return typedThis;
-    }
-
     @Override
     public LambdaQueryChainWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
         wrapperChildren.select(entityClass, predicate);

+ 0 - 6
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/query/QueryChainWrapper.java

@@ -48,12 +48,6 @@ public class QueryChainWrapper<T> extends AbstractChainWrapper<T, String, QueryC
         return typedThis;
     }
 
-    @Override
-    public QueryChainWrapper<T> select(Predicate<TableFieldInfo> predicate) {
-        wrapperChildren.select(predicate);
-        return typedThis;
-    }
-
     @Override
     public QueryChainWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
         wrapperChildren.select(entityClass, predicate);

+ 6 - 7
mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/AbstractKtWrapper.kt

@@ -36,13 +36,6 @@ abstract class AbstractKtWrapper<T, Children : AbstractKtWrapper<T, Children>> :
      */
     private lateinit var columnMap: Map<String, ColumnCache>
 
-    override fun initEntityClass() {
-        super.initEntityClass()
-        if (!::columnMap.isInitialized) {
-            columnMap = LambdaUtils.getColumnMap(this.checkEntityClass)
-        }
-    }
-
     /**
      * 重载方法,默认 onlyColumn = true
      */
@@ -63,4 +56,10 @@ abstract class AbstractKtWrapper<T, Children : AbstractKtWrapper<T, Children>> :
     fun columnsToString(onlyColumn: Boolean, vararg columns: KProperty<*>): String =
         columns.mapNotNull { columnToString(it, onlyColumn) }.joinToString(separator = StringPool.COMMA)
 
+    override fun initNeed() {
+        super.initNeed()
+        if (!::columnMap.isInitialized) {
+            columnMap = LambdaUtils.getColumnMap(this.entityClass)
+        }
+    }
 }

+ 3 - 8
mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtQueryWrapper.kt

@@ -39,20 +39,19 @@ class KtQueryWrapper<T : Any> : AbstractKtWrapper<T, KtQueryWrapper<T>>, Query<K
     private var sqlSelect: SharedString = SharedString()
 
     constructor(entity: T) {
-        this.setEntity(entity)
+        this.entity = entity
         this.initNeed()
     }
 
     constructor(entityClass: Class<T>) {
         this.entityClass = entityClass
-        this.initEntityClass()
         this.initNeed()
     }
 
     internal constructor(entity: T, entityClass: Class<T>, sqlSelect: SharedString, paramNameSeq: AtomicInteger,
                          paramNameValuePairs: Map<String, Any>, mergeSegments: MergeSegments,
                          lastSql: SharedString, sqlComment: SharedString) {
-        this.setEntity(entity)
+        this.entity = entity
         this.paramNameSeq = paramNameSeq
         this.paramNameValuePairs = paramNameValuePairs
         this.expression = mergeSegments
@@ -75,10 +74,6 @@ class KtQueryWrapper<T : Any> : AbstractKtWrapper<T, KtQueryWrapper<T>>, Query<K
         return typedThis
     }
 
-    override fun select(predicate: Predicate<TableFieldInfo>): KtQueryWrapper<T> {
-        return select(entityClass, predicate)
-    }
-
     /**
      * 过滤查询的字段信息(主键除外!)
      *
@@ -98,7 +93,7 @@ class KtQueryWrapper<T : Any> : AbstractKtWrapper<T, KtQueryWrapper<T>>, Query<K
      */
     override fun select(entityClass: Class<T>, predicate: Predicate<TableFieldInfo>): KtQueryWrapper<T> {
         this.entityClass = entityClass
-        this.sqlSelect.stringValue = TableInfoHelper.getTableInfo(checkEntityClass).chooseSelect(predicate)
+        this.sqlSelect.stringValue = TableInfoHelper.getTableInfo(getEntityClass()).chooseSelect(predicate)
         return typedThis
     }
 

+ 2 - 3
mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtUpdateWrapper.kt

@@ -39,19 +39,18 @@ class KtUpdateWrapper<T : Any> : AbstractKtWrapper<T, KtUpdateWrapper<T>>, Updat
     private val sqlSet = ArrayList<String>()
 
     constructor(entity: T) {
-        this.setEntity(entity)
+        this.entity = entity
         this.initNeed()
     }
 
     constructor(entityClass: Class<T>) {
         this.entityClass = entityClass
-        this.initEntityClass()
         this.initNeed()
     }
 
     internal constructor(entity: T, paramNameSeq: AtomicInteger, paramNameValuePairs: Map<String, Any>,
                          mergeSegments: MergeSegments, lastSql: SharedString, sqlComment: SharedString) {
-        this.setEntity(entity)
+        this.entity = entity
         this.paramNameSeq = paramNameSeq
         this.paramNameValuePairs = paramNameValuePairs
         this.expression = mergeSegments