Prechádzať zdrojové kódy

新增com.baomidou.mybatisplus.core.conditions.query.Query.select(java.util.List<R>)方法

VampireAchao 3 rokov pred
rodič
commit
baa8fa2cd1

+ 6 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractLambdaWrapper.java

@@ -24,6 +24,7 @@ import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import org.apache.ibatis.reflection.property.PropertyNamer;
 
 import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 
 import static java.util.stream.Collectors.joining;
@@ -37,7 +38,7 @@ import static java.util.stream.Collectors.joining;
  */
 @SuppressWarnings("serial")
 public abstract class AbstractLambdaWrapper<T, Children extends AbstractLambdaWrapper<T, Children>>
-        extends AbstractWrapper<T, SFunction<T, ?>, Children> {
+    extends AbstractWrapper<T, SFunction<T, ?>, Children> {
 
     private Map<String, ColumnCache> columnMap = null;
     private boolean initColumnMap = false;
@@ -53,6 +54,10 @@ public abstract class AbstractLambdaWrapper<T, Children extends AbstractLambdaWr
         return Arrays.stream(columns).map(i -> columnToString(i, onlyColumn)).collect(joining(StringPool.COMMA));
     }
 
+    protected final String columnsToString(boolean onlyColumn, List<SFunction<T, ?>> columns) {
+        return columns.stream().map(i -> columnToString(i, onlyColumn)).collect(joining(StringPool.COMMA));
+    }
+
     @Override
     protected String columnToString(SFunction<T, ?> column) {
         return columnToString(column, true);

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

@@ -22,8 +22,10 @@ import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
 import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
 import com.baomidou.mybatisplus.core.toolkit.Assert;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Predicate;
@@ -86,6 +88,19 @@ public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryW
         return typedThis;
     }
 
+    /**
+     * SELECT 部分 SQL 设置
+     *
+     * @param columns 查询字段
+     */
+    @Override
+    public LambdaQueryWrapper<T> select(List<SFunction<T, ?>> columns) {
+        if (CollectionUtils.isNotEmpty(columns)) {
+            this.sqlSelect.setStringValue(columnsToString(false, columns));
+        }
+        return typedThis;
+    }
+
     /**
      * 过滤查询的字段信息(主键除外!)
      * <p>例1: 只要 java 字段名以 "test" 开头的             -> select(i -&gt; i.getProperty().startsWith("test"))</p>

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

@@ -18,6 +18,7 @@ package com.baomidou.mybatisplus.core.conditions.query;
 import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
 
 import java.io.Serializable;
+import java.util.List;
 import java.util.function.Predicate;
 
 /**
@@ -32,6 +33,9 @@ public interface Query<Children, T, R> extends Serializable {
     @SuppressWarnings("unchecked")
     Children select(R... columns);
 
+
+    Children select(List<R> columns);
+
     /**
      * ignore
      * <p>注意只有内部有 entity 才能使用该方法</p>

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

@@ -21,9 +21,11 @@ import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
 import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
 import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Predicate;
@@ -85,6 +87,14 @@ public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
         return typedThis;
     }
 
+    @Override
+    public QueryWrapper<T> select(List<String> columns) {
+        if (CollectionUtils.isNotEmpty(columns)) {
+            this.sqlSelect.setStringValue(String.join(StringPool.COMMA, columns));
+        }
+        return typedThis;
+    }
+
     @Override
     public QueryWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
         super.setEntityClass(entityClass);

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

@@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
 import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.baomidou.mybatisplus.extension.conditions.AbstractChainWrapper;
 
+import java.util.List;
 import java.util.function.Predicate;
 
 /**
@@ -48,6 +49,12 @@ public class LambdaQueryChainWrapper<T> extends AbstractChainWrapper<T, SFunctio
         return typedThis;
     }
 
+    @Override
+    public LambdaQueryChainWrapper<T> select(List<SFunction<T, ?>> columns) {
+        wrapperChildren.select(columns);
+        return typedThis;
+    }
+
     @Override
     public LambdaQueryChainWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
         wrapperChildren.select(entityClass, predicate);

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

@@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
 import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
 import com.baomidou.mybatisplus.extension.conditions.AbstractChainWrapper;
 
+import java.util.List;
 import java.util.function.Predicate;
 
 /**
@@ -48,6 +49,12 @@ public class QueryChainWrapper<T> extends AbstractChainWrapper<T, String, QueryC
         return typedThis;
     }
 
+    @Override
+    public QueryChainWrapper<T> select(List<String> columns) {
+        wrapperChildren.select(columns);
+        return typedThis;
+    }
+
     @Override
     public QueryChainWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
         wrapperChildren.select(entityClass, predicate);

+ 3 - 0
mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/AbstractKtWrapper.kt

@@ -56,6 +56,9 @@ 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)
 
+    fun columnsToString(onlyColumn: Boolean, columns: MutableList<KProperty<*>>): String =
+        columns.mapNotNull { columnToString(it, onlyColumn) }.joinToString(separator = StringPool.COMMA)
+
     override fun initNeed() {
         super.initNeed()
         if (!::columnMap.isInitialized) {

+ 5 - 0
mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtQueryChainWrapper.kt

@@ -55,4 +55,9 @@ open class KtQueryChainWrapper<T : Any>(
         return baseMapper
     }
 
+    override fun select(columns: MutableList<KProperty<*>>): KtQueryChainWrapper<T> {
+        wrapperChildren.select(columns)
+        return typedThis
+    }
+
 }

+ 9 - 0
mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtQueryWrapper.kt

@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments
 import com.baomidou.mybatisplus.core.metadata.TableFieldInfo
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper
 import com.baomidou.mybatisplus.core.toolkit.ArrayUtils
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils
 import com.baomidou.mybatisplus.core.toolkit.support.ColumnCache
 import java.util.concurrent.atomic.AtomicInteger
 import java.util.function.Predicate
@@ -77,6 +78,14 @@ open class KtQueryWrapper<T : Any> : AbstractKtWrapper<T, KtQueryWrapper<T>>, Qu
         return typedThis
     }
 
+
+    override fun select(columns: MutableList<KProperty<*>>): KtQueryWrapper<T> {
+        if (CollectionUtils.isNotEmpty(columns)) {
+            this.sqlSelect.stringValue = columnsToString(false, columns)
+        }
+        return typedThis
+    }
+
     /**
      * 过滤查询的字段信息(主键除外!)
      *