feat:增加lambda on重载方法,简化使用

This commit is contained in:
robor.luo 2024-03-25 21:07:11 +08:00
parent 6c1fbd3898
commit eb23046d4a
3 changed files with 27 additions and 1 deletions

View File

@ -1004,6 +1004,7 @@ SELECT * FROM WHERE `id` >= 100 AND `user_name` LIKE '%michael%'
QueryWrapper query = QueryWrapper.create() QueryWrapper query = QueryWrapper.create()
.from(Article.class) .from(Article.class)
.leftJoin(Account.class).as("a").on( .leftJoin(Account.class).as("a").on(
//无其他特殊条件可简化成:.on(Account::getId, Article::getAccountId)
wrapper -> wrapper.where(Account::getId).eq(Article::getAccountId) wrapper -> wrapper.where(Account::getId).eq(Article::getAccountId)
) )
.where(Account::getId).ge(100, If::notEmpty) .where(Account::getId).ge(100, If::notEmpty)
@ -1012,7 +1013,7 @@ QueryWrapper query = QueryWrapper.create()
.or(Account::getAge).gt(200) .or(Account::getAge).gt(200)
.and(Article::getAccountId).eq(200) .and(Article::getAccountId).eq(200)
.or(wrapper1 -> { .or(wrapper1 -> {
wrapper1.where(Account::getId).like("a", If::notEmpty); wrapper1.where(Account::getId).like("a");
}) })
; ;
}); });

View File

@ -15,6 +15,9 @@
*/ */
package com.mybatisflex.core.query; package com.mybatisflex.core.query;
import com.mybatisflex.core.util.LambdaGetter;
import com.mybatisflex.core.util.LambdaUtil;
import java.util.ListIterator; import java.util.ListIterator;
import java.util.function.Consumer; import java.util.function.Consumer;
@ -73,5 +76,12 @@ public class Joiner<M extends QueryWrapper> {
return queryWrapper; return queryWrapper;
} }
public <T, K> M on(LambdaGetter<T> column1, LambdaGetter<K> column2) {
QueryCondition queryCondition = LambdaUtil.getQueryColumn(column1).eq(LambdaUtil.getQueryColumn(column2));
join.on(queryCondition);
return queryWrapper;
}
} }

View File

@ -145,5 +145,20 @@ public class LambdaSqlTest {
"WHERE\n" + "WHERE\n" +
" ` ac `.` age ` >= 18", SqlFormatter.format(queryWrapper.toSQL())); " ` 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()));
}
} }