瀏覽代碼

wrapper#select 新增 condition

miemie 2 年之前
父節點
當前提交
b26ed4fe59

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

@@ -74,8 +74,8 @@ public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryW
     }
 
     @Override
-    public LambdaQueryWrapper<T> select(List<SFunction<T, ?>> columns) {
-        if (CollectionUtils.isNotEmpty(columns)) {
+    public LambdaQueryWrapper<T> select(boolean condition, List<SFunction<T, ?>> columns) {
+        if (condition && CollectionUtils.isNotEmpty(columns)) {
             this.sqlSelect.setStringValue(columnsToString(false, columns));
         }
         return typedThis;

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

@@ -33,13 +33,28 @@ public interface Query<Children, T, R> extends Serializable {
      */
     @SuppressWarnings("unchecked")
     default Children select(R... columns) {
-        return select(Arrays.asList(columns));
+        return select(true, columns);
     }
 
     /**
      * ignore
      */
-    Children select(List<R> columns);
+    @SuppressWarnings("unchecked")
+    default Children select(boolean condition, R... columns) {
+        return select(condition, Arrays.asList(columns));
+    }
+
+    /**
+     * ignore
+     */
+    default Children select(List<R> columns) {
+        return select(true, columns);
+    }
+
+    /**
+     * ignore
+     */
+    Children select(boolean condition, List<R> columns);
 
     /**
      * ignore

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

@@ -79,8 +79,8 @@ public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
     }
 
     @Override
-    public QueryWrapper<T> select(List<String> columns) {
-        if (CollectionUtils.isNotEmpty(columns)) {
+    public QueryWrapper<T> select(boolean condition, List<String> columns) {
+        if (condition && CollectionUtils.isNotEmpty(columns)) {
             this.sqlSelect.setStringValue(String.join(StringPool.COMMA, columns));
         }
         return typedThis;

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

@@ -61,8 +61,8 @@ public class LambdaQueryChainWrapper<T> extends AbstractChainWrapper<T, SFunctio
     }
 
     @Override
-    public LambdaQueryChainWrapper<T> select(List<SFunction<T, ?>> columns) {
-        wrapperChildren.select(columns);
+    public LambdaQueryChainWrapper<T> select(boolean condition, List<SFunction<T, ?>> columns) {
+        wrapperChildren.select(condition, columns);
         return typedThis;
     }
 

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

@@ -53,8 +53,8 @@ public class QueryChainWrapper<T> extends AbstractChainWrapper<T, String, QueryC
     }
 
     @Override
-    public QueryChainWrapper<T> select(List<String> columns) {
-        wrapperChildren.select(columns);
+    public QueryChainWrapper<T> select(boolean condition, List<String> columns) {
+        wrapperChildren.select(condition, columns);
         return typedThis;
     }
 

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

@@ -19,6 +19,7 @@ import com.baomidou.mybatisplus.core.conditions.AbstractWrapper
 import com.baomidou.mybatisplus.core.toolkit.LambdaUtils
 import com.baomidou.mybatisplus.core.toolkit.StringPool
 import com.baomidou.mybatisplus.core.toolkit.support.ColumnCache
+import java.util.stream.Collectors.joining
 import kotlin.reflect.KProperty
 
 /**
@@ -56,6 +57,14 @@ 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)
 
+    /**
+     * 批量处理传入的属性,正常情况下的输出就像:
+     *
+     * "user_id" AS "userId" , "user_name" AS "userName"
+     */
+    fun columnsToString(onlyColumn: Boolean, columns: MutableList<KProperty<*>>): String =
+        columns.stream().map { columnToString(it, onlyColumn) }.collect(joining(StringPool.COMMA));
+
     override fun initNeed() {
         super.initNeed()
         if (!::columnMap.isInitialized) {

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

@@ -41,8 +41,8 @@ open class KtQueryChainWrapper<T : Any>(
         super.wrapperChildren = KtQueryWrapper(entity)
     }
 
-    override fun select(vararg columns: KProperty<*>): KtQueryChainWrapper<T> {
-        wrapperChildren.select(*columns)
+    override fun select(condition: Boolean, columns: MutableList<KProperty<*>>): KtQueryChainWrapper<T> {
+        wrapperChildren.select(condition, columns)
         return typedThis
     }
 

+ 4 - 27
mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtQueryWrapper.kt

@@ -20,7 +20,7 @@ import com.baomidou.mybatisplus.core.conditions.query.Query
 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
@@ -64,36 +64,13 @@ open class KtQueryWrapper<T : Any> : AbstractKtWrapper<T, KtQueryWrapper<T>>, Qu
         this.sqlFirst = sqlFirst
     }
 
-    /**
-     * SELECT 部分 SQL 设置
-     *
-     * @param columns 查询字段
-     */
-    @SafeVarargs
-    override fun select(vararg columns: KProperty<*>): KtQueryWrapper<T> {
-        if (ArrayUtils.isNotEmpty(columns)) {
-            this.sqlSelect.stringValue = columnsToString(false, *columns)
+    override fun select(condition: Boolean, columns: MutableList<KProperty<*>>): KtQueryWrapper<T> {
+        if (condition && CollectionUtils.isNotEmpty(columns)) {
+            this.sqlSelect.stringValue = columnsToString(false, columns)
         }
         return typedThis
     }
 
-    /**
-     * 过滤查询的字段信息(主键除外!)
-     *
-     * 例1: 只要 java 字段名以 "test" 开头的              -> select(i -> i.getProperty().startsWith("test"))
-     *
-     * 例2: 只要 java 字段属性是 CharSequence 类型的       -> select(TableFieldInfo::isCharSequence)
-     *
-     * 例3: 只要 java 字段没有填充策略的                   -> select(i -> i.getFieldFill == FieldFill.DEFAULT)
-     *
-     * 例4: 要全部字段                                   -> select(i -> true)
-     *
-     * 例5: 只要主键字段                                 -> select(i -> false)
-     *
-     *
-     * @param predicate 过滤方式
-     * @return this
-     */
     override fun select(entityClass: Class<T>, predicate: Predicate<TableFieldInfo>): KtQueryWrapper<T> {
         this.entityClass = entityClass
         this.sqlSelect.stringValue = TableInfoHelper.getTableInfo(getEntityClass()).chooseSelect(predicate)