From eb23046d4acc4a7b558593b8ee3824a950c9cae2 Mon Sep 17 00:00:00 2001 From: "robor.luo" Date: Mon, 25 Mar 2024 21:07:11 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=A2=9E=E5=8A=A0lambda=20on?= =?UTF-8?q?=E9=87=8D=E8=BD=BD=E6=96=B9=E6=B3=95=EF=BC=8C=E7=AE=80=E5=8C=96?= =?UTF-8?q?=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/base/querywrapper.md | 3 ++- .../java/com/mybatisflex/core/query/Joiner.java | 10 ++++++++++ .../com/mybatisflex/coretest/LambdaSqlTest.java | 15 +++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/docs/zh/base/querywrapper.md b/docs/zh/base/querywrapper.md index 92584add..53127c85 100644 --- a/docs/zh/base/querywrapper.md +++ b/docs/zh/base/querywrapper.md @@ -1004,6 +1004,7 @@ SELECT * FROM WHERE `id` >= 100 AND `user_name` LIKE '%michael%' QueryWrapper query = QueryWrapper.create() .from(Article.class) .leftJoin(Account.class).as("a").on( + //无其他特殊条件可简化成:.on(Account::getId, Article::getAccountId) wrapper -> wrapper.where(Account::getId).eq(Article::getAccountId) ) .where(Account::getId).ge(100, If::notEmpty) @@ -1012,7 +1013,7 @@ QueryWrapper query = QueryWrapper.create() .or(Account::getAge).gt(200) .and(Article::getAccountId).eq(200) .or(wrapper1 -> { - wrapper1.where(Account::getId).like("a", If::notEmpty); + wrapper1.where(Account::getId).like("a"); }) ; }); diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/Joiner.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/Joiner.java index 96c45b55..e6ebb5b7 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/Joiner.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/Joiner.java @@ -15,6 +15,9 @@ */ package com.mybatisflex.core.query; +import com.mybatisflex.core.util.LambdaGetter; +import com.mybatisflex.core.util.LambdaUtil; + import java.util.ListIterator; import java.util.function.Consumer; @@ -73,5 +76,12 @@ public class Joiner { return queryWrapper; } + public M on(LambdaGetter column1, LambdaGetter column2) { + QueryCondition queryCondition = LambdaUtil.getQueryColumn(column1).eq(LambdaUtil.getQueryColumn(column2)); + join.on(queryCondition); + return queryWrapper; + } + + } diff --git a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/LambdaSqlTest.java b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/LambdaSqlTest.java index c05afe87..682d534e 100644 --- a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/LambdaSqlTest.java +++ b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/LambdaSqlTest.java @@ -145,5 +145,20 @@ public class LambdaSqlTest { "WHERE\n" + " ` ac `.` age ` >= 18", SqlFormatter.format(queryWrapper.toSQL())); } + @Test + public void test06() { + QueryWrapper queryWrapper = QueryWrapper.create() + .select() + .from(Account.class).join(Article.class).on(Article::getAccountId, Account::getId) + .where(Account::getAge).ge(18); + printSQL(queryWrapper); + assertEquals("SELECT\n" + + " *\n" + + "FROM\n" + + " ` tb_account `\n" + + " JOIN ` tb_article ` ON ` tb_article `.` account_id ` = ` tb_account `.` id `\n" + + "WHERE\n" + + " ` tb_account `.` age ` >= 18", SqlFormatter.format(queryWrapper.toSQL())); + } }