Browse Source

issue #384 增加 exclude 方法排除指定字段

摆码王子 7 years ago
parent
commit
7c401a24b4

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

@@ -74,6 +74,13 @@ 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);
+        }
+        return typedThis;
+    }
+
     /**
      * <p>
      * 返回一个支持 lambda 函数写法的 wrapper

+ 12 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/StringUtils.java

@@ -841,4 +841,16 @@ public class StringUtils {
         }
         return buf.toString();
     }
+
+    /**
+     * 从字符串中移除一个单词及随后的一个逗号
+     *
+     * @param s 原字符串
+     * @param p 移除的单词
+     * @return
+     */
+    public static String removeWordWithComma(String s, String p) {
+        String match = "\\s*" + p + "\\s*,{0,1}";
+        return s.replaceAll(match,"");
+    }
 }

+ 17 - 5
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserTest.java

@@ -1,9 +1,5 @@
 package com.baomidou.mybatisplus.test.h2;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.test.h2.config.H2Db;
-import com.baomidou.mybatisplus.test.h2.entity.persistent.H2User;
-import com.baomidou.mybatisplus.test.h2.service.IH2UserService;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.sql.SQLException;
@@ -19,6 +15,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.test.h2.config.H2Db;
+import com.baomidou.mybatisplus.test.h2.entity.persistent.H2User;
+import com.baomidou.mybatisplus.test.h2.service.IH2UserService;
+
 /**
  * <p>
  * Mybatis Plus H2 Junit Test
@@ -155,5 +156,16 @@ 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");
+        List<H2User> list = userService.list(ew);
+        for (H2User u : list) {
+            Assert.assertNotNull(u.getTestId());
+            Assert.assertNotNull(u.getName());
+            Assert.assertNull(u.getPrice());
+        }
+    }
 }

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

@@ -2,7 +2,6 @@ package com.baomidou.mybatisplus.test.h2.config;
 
 import javax.sql.DataSource;
 
-import com.baomidou.mybatisplus.annotation.IdType;
 import org.apache.ibatis.plugin.Interceptor;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.apache.ibatis.type.JdbcType;
@@ -11,6 +10,7 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.core.io.ResourceLoader;
 
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.core.MybatisConfiguration;
 import com.baomidou.mybatisplus.core.config.GlobalConfig;
 import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
@@ -48,7 +48,7 @@ public class MybatisPlusConfig {
         configuration.setMapUnderscoreToCamelCase(true);
         sqlSessionFactory.setConfiguration(configuration);
         PaginationInterceptor pagination = new PaginationInterceptor();
-        pagination.setLocalPage(true);
+//        pagination.setLocalPage(true);
         OptimisticLockerInterceptor optLock = new OptimisticLockerInterceptor();
         sqlSessionFactory.setPlugins(new Interceptor[]{
             pagination,