From cace18d3bb8fd9b48f6602cba8a0e38e73d46670 Mon Sep 17 00:00:00 2001 From: yulichang <570810310@qq.com> Date: Sat, 25 May 2024 00:58:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20updateJoin=20set=E5=80=BC=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=85=B6=E4=BB=96=E5=AD=97=E6=AE=B5=20https://gitee.c?= =?UTF-8?q?om/best=5Fhandsome/mybatis-plus-join/issues/I9G29I?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yulichang/wrapper/UpdateJoinWrapper.java | 20 ++++++++++++++++++- .../yulichang/wrapper/interfaces/Update.java | 17 ++++++++++++++++ .../yulichang/test/join/m/UpdateIncTest.java | 20 ++++++++++++++++--- 3 files changed, 53 insertions(+), 4 deletions(-) diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/UpdateJoinWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/UpdateJoinWrapper.java index 8ab6a9d..04d23bf 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/UpdateJoinWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/UpdateJoinWrapper.java @@ -22,6 +22,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -119,6 +120,16 @@ public class UpdateJoinWrapper extends JoinAbstractLambdaWrapper UpdateJoinWrapper set(boolean condition, SFunction column, SFunction val, String mapping) { + return maybeDo(condition, () -> { + if (Objects.isNull(updateSet)) { + updateSet = new ArrayList<>(); + } + updateSet.add(new UpdateSet(column, val, mapping, false, null)); + }); + } + @Override public UpdateJoinWrapper setIncrBy(boolean condition, SFunction column, Number val) { return maybeDo(condition, () -> { @@ -164,7 +175,13 @@ public class UpdateJoinWrapper extends JoinAbstractLambdaWrapper value = (SFunction) i.getValue(); + return col + Constants.EQUALS + tableList.getPrefixByClass(LambdaUtils.getEntityClass(value)) + + Constants.DOT + getCache(value).getColumn(); + } else { + return col + Constants.EQUALS + formatParam(i.mapping, i.value); + } } }) .collect(Collectors.joining(StringPool.COMMA)) + StringPool.COMMA); @@ -256,6 +273,7 @@ public class UpdateJoinWrapper extends JoinAbstractLambdaWrapper extends Serializable { return set(true, column, val); } + /** + * ignore + */ + default Children set(SFunction column, SFunction val) { + return set(true, column, val); + } + /** * 设置 更新 SQL 的 SET 片段 * @@ -32,6 +39,10 @@ public interface Update extends Serializable { return set(condition, column, val, null); } + default Children set(boolean condition, SFunction column, SFunction val) { + return set(condition, column, val, null); + } + /** * ignore */ @@ -39,6 +50,10 @@ public interface Update extends Serializable { return set(true, column, val, mapping); } + default Children set(SFunction column, SFunction val, String mapping) { + return set(true, column, val, mapping); + } + /** * 设置 更新 SQL 的 SET 片段 * @@ -50,6 +65,8 @@ public interface Update extends Serializable { */ Children set(boolean condition, SFunction column, Object val, String mapping); + Children set(boolean condition, SFunction column, SFunction val, String mapping); + default Children setIncrBy(SFunction column, Number val) { return setIncrBy(true, column, val); } diff --git a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/UpdateIncTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/UpdateIncTest.java index 4d4ceaa..0eec002 100644 --- a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/UpdateIncTest.java +++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/UpdateIncTest.java @@ -1,5 +1,6 @@ package com.github.yulichang.test.join.m; +import com.github.yulichang.test.join.entity.AddressDO; import com.github.yulichang.test.join.entity.UserDO; import com.github.yulichang.test.util.Reset; import com.github.yulichang.test.util.ThreadLocalUtils; @@ -7,6 +8,7 @@ import com.github.yulichang.toolkit.JoinWrappers; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.jdbc.BadSqlGrammarException; @SpringBootTest public class UpdateIncTest { @@ -18,16 +20,28 @@ public class UpdateIncTest { @Test - void eqSql() { + void updateInc() { ThreadLocalUtils.set("UPDATE `user` t SET t.id = t.id + 100 WHERE t.del = false"); - JoinWrappers.update(UserDO.class).setIncrBy(UserDO::getId,100).update(); + JoinWrappers.update(UserDO.class).setIncrBy(UserDO::getId, 100).update(); JoinWrappers.lambda(UserDO.class).list().forEach(System.out::println); ThreadLocalUtils.set("UPDATE `user` t SET t.id = t.id - 100 WHERE t.del = false"); - JoinWrappers.update(UserDO.class).setDecrBy(UserDO::getId,100).update(); + JoinWrappers.update(UserDO.class).setDecrBy(UserDO::getId, 100).update(); JoinWrappers.lambda(UserDO.class).list().forEach(System.out::println); } + + @Test + void updateInc1() { + ThreadLocalUtils.set("UPDATE `user` t LEFT JOIN address t1 ON (t1.user_id = t.id) SET t1.address = t.head_img WHERE t.del = false AND t1.del = false"); + try { + JoinWrappers.update(UserDO.class).set(AddressDO::getAddress, UserDO::getImg) + .leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId).update(); + } catch (BadSqlGrammarException ignore) { + } + JoinWrappers.lambda(UserDO.class).list().forEach(System.out::println); + } + }