فهرست منبع

Merge pull request !34 from bliver/dev

bliver 8 سال پیش
والد
کامیت
74f4da4380

+ 70 - 0
src/main/java/com/baomidou/mybatisplus/entity/Columns.java

@@ -0,0 +1,70 @@
+/**
+ * Copyright (c) 2011-2014, hubin (jobob@qq.com).
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.baomidou.mybatisplus.entity;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 查询字段
+ * </p>
+ *
+ * @author bliver
+ * @Date 2017-07-28
+ */
+public class Columns implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Columns() {
+    }
+
+    /**
+     * 获取实例
+     */
+    public static Columns create() {
+        return new Columns();
+    }
+
+    public Columns column(String column) {
+        Column oneColumn = Column.create().column(column);
+        this.columns.add(oneColumn);
+        return this;
+    }
+
+    public Columns column(String column, String as) {
+        Column oneColumn = Column.create().column(column).as(as);
+        this.columns.add(oneColumn);
+        return this;
+    }
+
+    public Columns column(String column, String as, boolean escape) {
+        Column oneColumn = Column.create().column(column).as(as);
+        oneColumn.setEscape(escape);
+        this.columns.add(oneColumn);
+        return this;
+    }
+
+    //字段
+    private List<Column> columns = new ArrayList<>();
+
+    public Column[] getColumns() {
+        Column[] columnArray = new Column[columns.size()];
+        return columns.toArray(columnArray);
+    }
+}

+ 39 - 0
src/main/java/com/baomidou/mybatisplus/mapper/Wrapper.java

@@ -24,6 +24,7 @@ import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicInteger;
 
 
 import com.baomidou.mybatisplus.entity.Column;
 import com.baomidou.mybatisplus.entity.Column;
+import com.baomidou.mybatisplus.entity.Columns;
 import com.baomidou.mybatisplus.enums.SqlLike;
 import com.baomidou.mybatisplus.enums.SqlLike;
 import com.baomidou.mybatisplus.exceptions.MybatisPlusException;
 import com.baomidou.mybatisplus.exceptions.MybatisPlusException;
 import com.baomidou.mybatisplus.toolkit.ArrayUtils;
 import com.baomidou.mybatisplus.toolkit.ArrayUtils;
@@ -114,6 +115,28 @@ public abstract class Wrapper<T> implements Serializable {
         return this;
         return this;
     }
     }
 
 
+    /**
+     * <p>
+     * 使用字符串数组封装sqlSelect,便于在不需要指定 AS 的情况下通过实体类自动生成的列静态字段快速组装 sqlSelect,<br/>
+     * 减少手动录入的错误率
+     * </p>
+     * @param columns 字段
+     * @return
+     */
+    public Wrapper<T> setSqlSelect(String... columns) {
+        StringBuilder builder = new StringBuilder();
+        for (String column : columns) {
+            if (StringUtils.isNotEmpty(column)) {
+                if (builder.length() > 0) {
+                    builder.append(",");
+                }
+                builder.append(column);
+            }
+        }
+        this.sqlSelect = builder.toString();
+        return this;
+    }
+
     /**
     /**
      * <p>
      * <p>
      * 使用对象封装的setsqlselect
      * 使用对象封装的setsqlselect
@@ -143,6 +166,22 @@ public abstract class Wrapper<T> implements Serializable {
         return this;
         return this;
     }
     }
 
 
+    /**
+     * <p>
+     * 使用对象封装的setsqlselect
+     * </p>
+     *
+     * @param columns 字段
+     * @return
+     */
+    public Wrapper<T> setSqlSelect(Columns columns) {
+        Column[] columnArray = columns.getColumns();
+        if (ArrayUtils.isNotEmpty(columnArray)) {
+            setSqlSelect(columnArray);
+        }
+        return this;
+    }
+
     /**
     /**
      * <p>
      * <p>
      * SQL 片段 (子类实现)
      * SQL 片段 (子类实现)

+ 23 - 0
src/test/java/com/baomidou/mybatisplus/test/EntityWrapperTest.java

@@ -23,6 +23,7 @@ import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeMap;
 import java.util.TreeSet;
 import java.util.TreeSet;
 
 
+import com.baomidou.mybatisplus.entity.Columns;
 import org.junit.Assert;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.Test;
 
 
@@ -349,6 +350,17 @@ public class EntityWrapperTest {
         Assert.assertEquals("AND (name=?)\nORDER BY id DESC limit 1,2", sqlSegment);
         Assert.assertEquals("AND (name=?)\nORDER BY id DESC limit 1,2", sqlSegment);
     }
     }
 
 
+    /**
+     * 测试 sqlselect
+     */
+    @Test
+    public void testSqlSelectStrings() {
+        EntityWrapper entityWrapper = new EntityWrapper();
+        entityWrapper.setSqlSelect("name", "age", "sex");
+        System.out.println(entityWrapper.getSqlSelect());
+        Assert.assertEquals("name,age,sex", entityWrapper.getSqlSelect());
+    }
+
     /**
     /**
      * 测试 sqlselect
      * 测试 sqlselect
      */
      */
@@ -362,5 +374,16 @@ public class EntityWrapperTest {
 
 
     }
     }
 
 
+    /**
+     * 测试 sqlselect
+     */
+    @Test
+    public void testSqlSelectColumns() {
+        EntityWrapper entityWrapper = new EntityWrapper();
+        Columns columns = Columns.create().column("name", "name1").column("age").column("sex", "sex1", false);
+        entityWrapper.setSqlSelect(columns);
+        System.out.println(entityWrapper.getSqlSelect());
+        Assert.assertEquals("name AS name1,age,sex AS sex1", entityWrapper.getSqlSelect());
+    }
 
 
 }
 }