Browse Source

爆改了一下

miemie 7 years ago
parent
commit
92e1516fd0

+ 12 - 5
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java

@@ -45,8 +45,8 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
      */
     private static final String PLACE_HOLDER = "{%s}";
     private static final String MYBATIS_PLUS_TOKEN = "#{%s.paramNameValuePairs.%s}";
-    private final AtomicInteger paramNameSeq = new AtomicInteger(0);
-    private final Map<String, Object> paramNameValuePairs = new HashMap<>();
+    protected AtomicInteger paramNameSeq;
+    protected Map<String, Object> paramNameValuePairs = new HashMap<>();
     protected String paramAlias = null;
     private List<ISqlSegment> expression = new ArrayList<>();
 
@@ -354,11 +354,15 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
      * @return
      */
     protected This addNestedCondition(Function<This, This> condition, SqlKeyword sqlKeyword) {
-//        return doIt(true, sqlKeyword, () -> "(",
-//            condition.apply(instance(paramNameValuePairs, paramNameSeq)), () -> ")");
-        return null;//todo 待处理
+        return doIt(true, sqlKeyword, () -> "(",
+            condition.apply(instance(paramNameSeq, paramNameValuePairs)), () -> ")");
     }
 
+    /**
+     * 子类返回一个自己的新对象
+     */
+    protected abstract This instance(AtomicInteger paramNameSeq, Map<String, Object> paramNameValuePairs);
+
     /**
      * <p>
      * 格式化SQL
@@ -449,4 +453,7 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
             .collect(Collectors.toList()));
     }
 
+    public Map<String, Object> getParamNameValuePairs() {
+        return paramNameValuePairs;
+    }
 }

+ 26 - 6
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/EntityWrapper.java

@@ -19,6 +19,10 @@ package com.baomidou.mybatisplus.core.conditions;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils;
 
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
 /**
  * <p>
  * Entity 对象封装操作类
@@ -38,18 +42,29 @@ public class EntityWrapper<T> extends AbstractWrapper<T, String, EntityWrapper<T
      */
     protected String sqlSelect = null;
 
-
     public EntityWrapper() {
-        /* 注意,传入查询参数 */
+        this.paramNameSeq = new AtomicInteger(0);
+        this.paramNameValuePairs = new HashMap<>();
     }
 
     public EntityWrapper(T entity) {
         this.entity = entity;
+        this.paramNameSeq = new AtomicInteger(0);
+        this.paramNameValuePairs = new HashMap<>();
     }
 
     public EntityWrapper(T entity, String sqlSelect) {
         this.entity = entity;
         this.sqlSelect = sqlSelect;
+        this.paramNameSeq = new AtomicInteger(0);
+        this.paramNameValuePairs = new HashMap<>();
+    }
+
+    private EntityWrapper(T entity, String sqlSelect, AtomicInteger paramNameSeq, Map<String, Object> paramNameValuePairs) {
+        this.entity = entity;
+        this.sqlSelect = sqlSelect;
+        this.paramNameSeq = paramNameSeq;
+        this.paramNameValuePairs = paramNameValuePairs;
     }
 
     @Override
@@ -59,7 +74,7 @@ public class EntityWrapper<T> extends AbstractWrapper<T, String, EntityWrapper<T
 
     public EntityWrapper<T> setEntity(T entity) {
         this.entity = entity;
-        return this;
+        return typedThis();
     }
 
     public String getSqlSelect() {
@@ -70,11 +85,16 @@ public class EntityWrapper<T> extends AbstractWrapper<T, String, EntityWrapper<T
         if (StringUtils.isNotEmpty(sqlSelect)) {
             this.sqlSelect = sqlSelect;
         }
-        return this;
+        return typedThis();
     }
 
-    public LambdaWrapper<T> stream() {
-        return new LambdaWrapper<>();
+//    public LambdaWrapper<T> stream() {
+//        return new LambdaWrapper<>();
+//    }
+
+    @Override
+    protected EntityWrapper<T> instance(AtomicInteger paramNameSeq, Map<String, Object> paramNameValuePairs) {
+        return new EntityWrapper<>(entity, sqlSelect, paramNameSeq, paramNameValuePairs);
     }
 
     @Override

+ 66 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/LambdaWrapper.java

@@ -15,9 +15,15 @@
  */
 package com.baomidou.mybatisplus.core.conditions;
 
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
+import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils;
 import com.baomidou.mybatisplus.core.toolkit.support.Property;
 
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
 /**
  * <p>
  * 查询条件封装
@@ -26,7 +32,66 @@ import com.baomidou.mybatisplus.core.toolkit.support.Property;
  * @author hubin
  * @since 2017-05-26
  */
-public class LambdaWrapper<T> extends AbstractWrapper<T, Property<T, ?>,  LambdaWrapper<T>> {
+public class LambdaWrapper<T> extends AbstractWrapper<T, Property<T, ?>, LambdaWrapper<T>> {
+    /**
+     * 数据库表映射实体类
+     */
+    protected T entity = null;
+    /**
+     * SQL 查询字段内容,例如:id,name,age
+     */
+    protected String sqlSelect = null;
+
+    public LambdaWrapper() {
+        this.paramNameSeq = new AtomicInteger(0);
+        this.paramNameValuePairs = new HashMap<>();
+    }
+
+    public LambdaWrapper(T entity) {
+        this.entity = entity;
+        this.paramNameSeq = new AtomicInteger(0);
+        this.paramNameValuePairs = new HashMap<>();
+    }
+
+    public LambdaWrapper(T entity, String sqlSelect) {
+        this.entity = entity;
+        this.sqlSelect = sqlSelect;
+        this.paramNameSeq = new AtomicInteger(0);
+        this.paramNameValuePairs = new HashMap<>();
+    }
+
+    private LambdaWrapper(T entity, String sqlSelect, AtomicInteger paramNameSeq, Map<String, Object> paramNameValuePairs) {
+        this.entity = entity;
+        this.sqlSelect = sqlSelect;
+        this.paramNameSeq = paramNameSeq;
+        this.paramNameValuePairs = paramNameValuePairs;
+    }
+
+    @Override
+    public T getEntity() {
+        return entity;
+    }
+
+    public LambdaWrapper<T> setEntity(T entity) {
+        this.entity = entity;
+        return typedThis();
+    }
+
+    public String getSqlSelect() {
+        return StringUtils.isEmpty(sqlSelect) ? null : SqlUtils.stripSqlInjection(sqlSelect);
+    }
+
+    public LambdaWrapper<T> setSqlSelect(String sqlSelect) {
+        if (StringUtils.isNotEmpty(sqlSelect)) {
+            this.sqlSelect = sqlSelect;
+        }
+        return typedThis();
+    }
+
+    @Override
+    protected LambdaWrapper<T> instance(AtomicInteger paramNameSeq, Map<String, Object> paramNameValuePairs) {
+        return new LambdaWrapper<>(entity, sqlSelect, paramNameSeq, paramNameValuePairs);
+    }
 
     @Override
     public String columnToString(Property<T, ?> column) {

+ 15 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/UpdateWrapper.java

@@ -16,6 +16,9 @@
 package com.baomidou.mybatisplus.core.conditions;
 
 
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
 /**
  * <p>
  * Entity 对象封装操作类,定义T-SQL语法
@@ -48,6 +51,13 @@ public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T
         this.sqlSet = sqlSet;
     }
 
+    private UpdateWrapper(T entity, String sqlSet, AtomicInteger paramNameSeq, Map<String, Object> paramNameValuePairs) {
+        this.entity = entity;
+        this.sqlSet = sqlSet;
+        this.paramNameSeq = paramNameSeq;
+        this.paramNameValuePairs = paramNameValuePairs;
+    }
+
     @Override
     public T getEntity() {
         return entity;
@@ -70,10 +80,14 @@ public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T
      */
     @Override
     public String getSqlSegment() {
-
         return null;
     }
 
+    @Override
+    protected UpdateWrapper<T> instance(AtomicInteger paramNameSeq, Map<String, Object> paramNameValuePairs) {
+        return new UpdateWrapper<>(entity, sqlSet, paramNameSeq, paramNameValuePairs);
+    }
+
     @Override
     public String columnToString(String column) {
         return column;

+ 11 - 2
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/test/WrapperTest.java

@@ -1,9 +1,8 @@
 package com.baomidou.mybatisplus.core.test;
 
-import org.junit.Test;
-
 import com.baomidou.mybatisplus.core.conditions.EntityWrapper;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import org.junit.Test;
 
 public class WrapperTest {
 
@@ -22,6 +21,16 @@ public class WrapperTest {
         log(wrapper.getSqlSegment());
     }
 
+    @Test
+    public void test1() {
+        EntityWrapper<User> ew = new EntityWrapper<User>()
+            .eq("xxx", 123)
+            .and(i -> i.eq("andx", 65444).and().le("ande", 66666))
+            .and().ne("xxx", 222);
+        log(ew.getSqlSegment());
+        ew.getParamNameValuePairs().forEach((k, v) -> System.out.println("key = " + k + " ; value = " + v));
+    }
+
 //    public void test() {
 //        String sql = new QueryWrapper()
 //            .where("b.age > 18", condition ->