Jelajahi Sumber

加个类, java 没有多继承,怎么搞那俩 lambda 的类?

miemie 7 tahun lalu
induk
melakukan
fe1ae70e09

+ 77 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/AbstractUpdateWrapper.java

@@ -0,0 +1,77 @@
+package com.baomidou.mybatisplus.core.conditions.update;
+
+import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
+import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.EQ;
+
+/**
+ * <p>
+ * Update 条件封装
+ * </p>
+ *
+ * @author hubin miemie HCL
+ * @since 2018-05-30
+ */
+public abstract class AbstractUpdateWrapper<T, R, This extends AbstractUpdateWrapper<T, R, This>> extends AbstractWrapper<T, R, This> {
+
+//    /**
+//     * SQL 更新字段内容,例如:name='1',age=2
+//     */
+//    protected String sqlSet;
+
+    private List<ISqlSegment> setExpression = new ArrayList<>();
+
+    /**
+     * 例: setSql("name='1',age=2")
+     */
+    public This setSql(String sql) {
+        return setSql(true, sql);
+    }
+
+    /**
+     * 例: setSql("name='1',age=2")
+     */
+    public This setSql(boolean condition, String sql) {
+        return doItUpd(condition, () -> sql);
+    }
+
+    /**
+     * 字段 = 值
+     */
+    public This set(R column, Object val) {
+        return set(true, column, val);
+    }
+
+    /**
+     * 字段 = 值
+     */
+    public This set(boolean condition, R column, Object val) {
+        return doItUpd(condition, () -> columnToString(column), EQ, () -> formatSql("{0}", val));
+    }
+
+    protected This doItUpd(boolean condition, ISqlSegment... sqlSegments) {
+        if (condition) {
+            setExpression.addAll(Arrays.asList(sqlSegments));
+            setExpression.add(() -> ",");
+        }
+        return typedThis();
+    }
+
+    @Override
+    public String getSqlSet() {
+        String sqlSet = String.join("", setExpression.stream()
+            .map(ISqlSegment::getSqlSegment)
+            .collect(Collectors.toList()));
+        if (StringUtils.isNotEmpty(sqlSet)) {
+            sqlSet = sqlSet.substring(0, sqlSet.length() - 1);
+        }
+        return sqlSet;
+    }
+}