|
@@ -15,23 +15,26 @@
|
|
*/
|
|
*/
|
|
package com.baomidou.mybatisplus.core.conditions.query;
|
|
package com.baomidou.mybatisplus.core.conditions.query;
|
|
|
|
|
|
|
|
+import static java.util.stream.Collectors.joining;
|
|
|
|
+
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.Arrays;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
+import java.util.function.Predicate;
|
|
|
|
+
|
|
import com.baomidou.mybatisplus.core.conditions.AbstractLambdaWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.AbstractLambdaWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
|
|
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
|
|
|
|
+import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
|
|
import com.baomidou.mybatisplus.core.toolkit.Assert;
|
|
import com.baomidou.mybatisplus.core.toolkit.Assert;
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
|
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
|
|
import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
|
|
import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.support.Property;
|
|
import com.baomidou.mybatisplus.core.toolkit.support.Property;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
|
-import java.util.Arrays;
|
|
|
|
-import java.util.List;
|
|
|
|
-import java.util.Map;
|
|
|
|
-import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
-
|
|
|
|
-import static java.util.stream.Collectors.joining;
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* <p>
|
|
* <p>
|
|
* Lambda 语法使用 Wrapper
|
|
* Lambda 语法使用 Wrapper
|
|
@@ -43,6 +46,11 @@ import static java.util.stream.Collectors.joining;
|
|
@SuppressWarnings("serial")
|
|
@SuppressWarnings("serial")
|
|
public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryWrapper<T>> {
|
|
public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryWrapper<T>> {
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 过滤的字段
|
|
|
|
+ */
|
|
|
|
+ private String predicateSelect;
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 查询字段
|
|
* 查询字段
|
|
*/
|
|
*/
|
|
@@ -51,6 +59,7 @@ public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryW
|
|
/**
|
|
/**
|
|
* 排除字段
|
|
* 排除字段
|
|
*/
|
|
*/
|
|
|
|
+ @Deprecated
|
|
private List<String> excludeColumn = new ArrayList<>();
|
|
private List<String> excludeColumn = new ArrayList<>();
|
|
|
|
|
|
public LambdaQueryWrapper() {
|
|
public LambdaQueryWrapper() {
|
|
@@ -75,6 +84,9 @@ public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryW
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public String getSqlSelect() {
|
|
public String getSqlSelect() {
|
|
|
|
+ if (StringUtils.isNotEmpty(predicateSelect)) {
|
|
|
|
+ return predicateSelect;
|
|
|
|
+ }
|
|
if (CollectionUtils.isEmpty(queryColumn)) {
|
|
if (CollectionUtils.isEmpty(queryColumn)) {
|
|
if (entityClass != null) {
|
|
if (entityClass != null) {
|
|
queryColumn = Arrays.asList(TableInfoHelper.getTableColumns(entityClass, excludeColumn.toArray(new String[0])));
|
|
queryColumn = Arrays.asList(TableInfoHelper.getTableColumns(entityClass, excludeColumn.toArray(new String[0])));
|
|
@@ -101,13 +113,37 @@ public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryW
|
|
return typedThis;
|
|
return typedThis;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * <p>
|
|
|
|
+ * 过滤查询的字段信息(主键除外!)
|
|
|
|
+ * 目前该方法优先级最高,一旦使用其他的设置select的方法将失效!!!
|
|
|
|
+ * </p>
|
|
|
|
+ * <p>
|
|
|
|
+ * 例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)
|
|
|
|
+ * </p>
|
|
|
|
+ *
|
|
|
|
+ * @param predicate 过滤方式
|
|
|
|
+ * @return this
|
|
|
|
+ */
|
|
|
|
+ public LambdaQueryWrapper<T> select(Predicate<TableFieldInfo> predicate) {
|
|
|
|
+ this.checkEntityClass();
|
|
|
|
+ this.predicateSelect = TableInfoHelper.getTableInfo(entityClass).chooseSelect(predicate);
|
|
|
|
+ return typedThis;
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* <p>
|
|
* <p>
|
|
* SELECT 部分 SQL 设置
|
|
* SELECT 部分 SQL 设置
|
|
* </p>
|
|
* </p>
|
|
*
|
|
*
|
|
* @param excludeColumns 排除的查询字段
|
|
* @param excludeColumns 排除的查询字段
|
|
|
|
+ * @deprecated begin 3.0.3,建议使用 {@link #select(Predicate)}
|
|
*/
|
|
*/
|
|
|
|
+ @Deprecated
|
|
@SafeVarargs
|
|
@SafeVarargs
|
|
public final LambdaQueryWrapper<T> excludeColumns(Class<T> entityClass, Property<T, ?>... excludeColumns) {
|
|
public final LambdaQueryWrapper<T> excludeColumns(Class<T> entityClass, Property<T, ?>... excludeColumns) {
|
|
this.checkEntityClass();
|
|
this.checkEntityClass();
|
|
@@ -126,8 +162,10 @@ public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryW
|
|
* </p>
|
|
* </p>
|
|
*
|
|
*
|
|
* @param excludeColumns 排除字段列表
|
|
* @param excludeColumns 排除字段列表
|
|
|
|
+ * @deprecated begin 3.0.3,建议使用 {@link #select(Predicate)}
|
|
*/
|
|
*/
|
|
@SafeVarargs
|
|
@SafeVarargs
|
|
|
|
+ @Deprecated
|
|
@SuppressWarnings(value = "unchecked")
|
|
@SuppressWarnings(value = "unchecked")
|
|
public final LambdaQueryWrapper<T> excludeColumns(Property<T, ?>... excludeColumns) {
|
|
public final LambdaQueryWrapper<T> excludeColumns(Property<T, ?>... excludeColumns) {
|
|
Assert.notNull(entityClass, "Unable to find entity type, please use method `excludeColumns(Class<T> entityClass, String... excludeColumns)`");
|
|
Assert.notNull(entityClass, "Unable to find entity type, please use method `excludeColumns(Class<T> entityClass, String... excludeColumns)`");
|