Browse Source

wrapper select 支持排除字段

hubin 7 years ago
parent
commit
3ebd945b6e

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

@@ -75,6 +75,21 @@ public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryW
         return typedThis;
     }
 
+    /**
+     * <p>
+     * SELECT 部分 SQL 设置
+     * </p>
+     *
+     * @param excludeColumns 排除的查询字段
+     */
+    public LambdaQueryWrapper<T> select(Class<T> clazz, Property<T, ?>... excludeColumns) {
+        // TODO 待定
+//        if(StringUtils.isNotEmpty(sqlSelect)){
+//            Class clazz = ReflectionKit.getSuperClassGenricType(getClass(), 1);
+//            this.sqlSelect = TableInfoHelper.getTableColumns(clazz, excludeColumns);
+//        }
+        return typedThis;
+    }
 
     @Override
     protected LambdaQueryWrapper<T> instance(AtomicInteger paramNameSeq, Map<String, Object> paramNameValuePairs) {

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

@@ -21,6 +21,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
 import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils;
 
 /**
@@ -74,10 +75,8 @@ public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
         return typedThis;
     }
 
-    public QueryWrapper<T> exclude(String column) {
-        if(StringUtils.isNotEmpty(sqlSelect)){
-            this.sqlSelect = StringUtils.removeWordWithComma(this.sqlSelect, column);
-        }
+    public QueryWrapper<T> select(Class<T> clazz, String... excludeColumns) {
+        this.sqlSelect = TableInfoHelper.getTableColumns(clazz, excludeColumns);
         return typedThis;
     }
 

+ 54 - 13
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/TableInfoHelper.java

@@ -15,13 +15,14 @@
  */
 package com.baomidou.mybatisplus.core.toolkit;
 
-import com.baomidou.mybatisplus.annotation.*;
-import com.baomidou.mybatisplus.core.config.GlobalConfig;
-import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
-import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
-import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
-import com.baomidou.mybatisplus.core.metadata.TableInfo;
-import com.baomidou.mybatisplus.core.toolkit.sql.SqlHelper;
+import static java.util.stream.Collectors.joining;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.ibatis.builder.MapperBuilderAssistant;
 import org.apache.ibatis.executor.keygen.KeyGenerator;
@@ -37,12 +38,17 @@ import org.apache.ibatis.scripting.LanguageDriver;
 import org.apache.ibatis.session.Configuration;
 import org.apache.ibatis.session.SqlSessionFactory;
 
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.core.config.GlobalConfig;
+import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
+import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
+import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import com.baomidou.mybatisplus.core.toolkit.sql.SqlHelper;
 
 /**
  * <p>
@@ -92,6 +98,41 @@ public class TableInfoHelper {
         return tableInfo;
     }
 
+    /**
+     * <p>
+     * 获取表字段
+     * </p>
+     *
+     * @param clazz          表对应实体类 Class
+     * @param excludeColumns 排除字段
+     * @return
+     */
+    public static String getTableColumns(Class<?> clazz, String... excludeColumns) {
+        if (null == clazz || ArrayUtils.isEmpty(excludeColumns)) {
+            return null;
+        }
+
+        TableInfo tableInfo = getTableInfo(clazz);
+        Assert.notNull(tableInfo, "Undiscovered table info . " + clazz.getName());
+
+        // 添加表字段
+        List<String> columns = new ArrayList<>();
+        if (null != tableInfo.getKeyColumn()) {
+            columns.add(tableInfo.getKeyColumn());
+        }
+        for (TableFieldInfo tableFieldInfo : tableInfo.getFieldList()) {
+            columns.add(tableFieldInfo.getColumn());
+        }
+
+        // 移除不需要的字段
+        for (String ec : excludeColumns) {
+            if (null != ec) {
+                columns.remove(ec);
+            }
+        }
+        return CollectionUtils.isEmpty(columns) ? null : columns.stream().collect(joining(","));
+    }
+
     /**
      * <p>
      * 获取所有实体映射表信息

+ 0 - 2
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/PaginationInterceptor.java

@@ -235,8 +235,6 @@ public class PaginationInterceptor extends AbstractSqlParserHandler implements I
     public void setProperties(Properties prop) {
         String dialectType = prop.getProperty("dialectType");
         String dialectClazz = prop.getProperty("dialectClazz");
-        String localPage = prop.getProperty("localPage");
-
         if (StringUtils.isNotEmpty(dialectType)) {
             this.dialectType = dialectType;
         }

+ 1 - 2
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserTest.java

@@ -159,8 +159,7 @@ public class H2UserTest extends BaseTest {
     @Test
     public void testEntityWrapperSelectSqlExcludeColumn() {
         QueryWrapper<H2User> ew = new QueryWrapper<>();
-        ew.select("test_id as id, name, age");
-        ew.exclude("name");
+        ew.select(H2User.class, "age", "price", null);
         List<H2User> list = userService.list(ew);
         for (H2User u : list) {
             Assert.assertNotNull(u.getTestId());

+ 0 - 1
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusConfig.java

@@ -48,7 +48,6 @@ public class MybatisPlusConfig {
         configuration.setMapUnderscoreToCamelCase(true);
         sqlSessionFactory.setConfiguration(configuration);
         PaginationInterceptor pagination = new PaginationInterceptor();
-//        pagination.setLocalPage(true);
         OptimisticLockerInterceptor optLock = new OptimisticLockerInterceptor();
         sqlSessionFactory.setPlugins(new Interceptor[]{
             pagination,