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 40787313..9abaca4c 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,8 @@ */ package com.mybatisflex.core.query; +import java.util.function.Consumer; + /** * @author michael yang (fuhai999@gmail.com) * @Date: 2020/1/14 @@ -43,5 +45,12 @@ public class Joiner { join.on(on); return queryWrapper; } + + public M on(Consumer consumer) { + QueryWrapper newWrapper = new QueryWrapper(); + consumer.accept(newWrapper); + join.on(newWrapper.whereQueryCondition); + return queryWrapper; + } } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/LambdaConditionBuilder.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryConditionBuilder.java similarity index 85% rename from mybatis-flex-core/src/main/java/com/mybatisflex/core/query/LambdaConditionBuilder.java rename to mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryConditionBuilder.java index 45dee1aa..0c300c5b 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/LambdaConditionBuilder.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryConditionBuilder.java @@ -15,16 +15,19 @@ */ package com.mybatisflex.core.query; +import com.mybatisflex.core.util.LambdaGetter; +import com.mybatisflex.core.util.LambdaUtil; + import java.util.Collection; import java.util.function.Predicate; -public class LambdaConditionBuilder { +public class QueryConditionBuilder { private QueryWrapper queryWrapper; private QueryColumn queryColumn; private SqlConnector connector; - public LambdaConditionBuilder(QueryWrapper queryWrapper, QueryColumn queryColumn, SqlConnector connector) { + public QueryConditionBuilder(QueryWrapper queryWrapper, QueryColumn queryColumn, SqlConnector connector) { this.queryWrapper = queryWrapper; this.queryColumn = queryColumn; this.connector = connector; @@ -51,6 +54,16 @@ public class LambdaConditionBuilder { } + public QueryWrapper eq(LambdaGetter value) { + return eq(LambdaUtil.getQueryColumn(value)); + } + + + public QueryWrapper eq(LambdaGetter value, Predicate when) { + return eq(LambdaUtil.getQueryColumn(value), when); + } + + /** * not equals != * @@ -70,6 +83,15 @@ public class LambdaConditionBuilder { return queryWrapper; } + public QueryWrapper ne(LambdaGetter value) { + return ne(LambdaUtil.getQueryColumn(value)); + } + + + public QueryWrapper ne(LambdaGetter value, Predicate when) { + return ne(LambdaUtil.getQueryColumn(value), when); + } + /** * like %% @@ -139,6 +161,16 @@ public class LambdaConditionBuilder { return queryWrapper; } + public QueryWrapper gt(LambdaGetter value) { + return gt(LambdaUtil.getQueryColumn(value)); + } + + + public QueryWrapper gt(LambdaGetter value, Predicate when) { + return gt(LambdaUtil.getQueryColumn(value), when); + } + + /** * 大于等于 greater or equal * @@ -158,6 +190,15 @@ public class LambdaConditionBuilder { return queryWrapper; } + public QueryWrapper ge(LambdaGetter value) { + return ge(LambdaUtil.getQueryColumn(value)); + } + + + public QueryWrapper ge(LambdaGetter value, Predicate when) { + return ge(LambdaUtil.getQueryColumn(value), when); + } + /** * 小于 less than * @@ -177,6 +218,15 @@ public class LambdaConditionBuilder { return queryWrapper; } + public QueryWrapper lt(LambdaGetter value) { + return lt(LambdaUtil.getQueryColumn(value)); + } + + + public QueryWrapper lt(LambdaGetter value, Predicate when) { + return lt(LambdaUtil.getQueryColumn(value), when); + } + /** * 小于等于 less or equal * @@ -189,6 +239,7 @@ public class LambdaConditionBuilder { return queryWrapper; } + public QueryWrapper le(Object value, Predicate when) { if (value != null) { queryWrapper.addWhereQueryCondition(queryColumn.le(value, when), connector); @@ -196,6 +247,15 @@ public class LambdaConditionBuilder { return queryWrapper; } + public QueryWrapper le(LambdaGetter value) { + return le(LambdaUtil.getQueryColumn(value)); + } + + + public QueryWrapper le(LambdaGetter value, Predicate when) { + return le(LambdaUtil.getQueryColumn(value), when); + } + /** * IS NULL @@ -365,6 +425,7 @@ public class LambdaConditionBuilder { return queryWrapper; } + public QueryWrapper between(Object start, Object end, Predicate when) { if (queryWrapper != null) { queryWrapper.addWhereQueryCondition(queryColumn.between(start, end, when), connector); diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryWrapper.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryWrapper.java index 1309efea..8eed3533 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryWrapper.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryWrapper.java @@ -137,8 +137,8 @@ public class QueryWrapper extends BaseQueryWrapper { return this; } - public LambdaConditionBuilder where(LambdaGetter fn) { - return new LambdaConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.AND); + public QueryConditionBuilder where(LambdaGetter fn) { + return new QueryConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.AND); } public QueryWrapper and(QueryCondition queryCondition) { @@ -155,8 +155,8 @@ public class QueryWrapper extends BaseQueryWrapper { return this; } - public LambdaConditionBuilder and(LambdaGetter fn) { - return new LambdaConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.AND); + public QueryConditionBuilder and(LambdaGetter fn) { + return new QueryConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.AND); } @@ -184,6 +184,10 @@ public class QueryWrapper extends BaseQueryWrapper { return this; } + public QueryConditionBuilder or(LambdaGetter fn) { + return new QueryConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.OR); + } + public QueryWrapper or(Consumer consumer) { QueryWrapper newWrapper = new QueryWrapper(); consumer.accept(newWrapper); @@ -194,11 +198,6 @@ public class QueryWrapper extends BaseQueryWrapper { return this; } - - public LambdaConditionBuilder or(LambdaGetter fn) { - return new LambdaConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.OR); - } - public Joiner leftJoin(String table) { return joining(Join.TYPE_LEFT, new QueryTable(table), true); } diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/EntityTestStarter.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/EntityTestStarter.java index 5df715de..bca7d81e 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/EntityTestStarter.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/EntityTestStarter.java @@ -26,9 +26,6 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; import javax.sql.DataSource; -import static com.mybatisflex.test.table.AccountTableDef.ACCOUNT; -import static com.mybatisflex.test.table.ArticleTableDef.ARTICLE; - public class EntityTestStarter { public static void main(String[] args) { @@ -117,8 +114,9 @@ public class EntityTestStarter { // , ACCOUNT.AGE.as(ArticleDTO::getAuthorAge) // , ACCOUNT.BIRTHDAY // ) - .from(ARTICLE) - .leftJoin(ACCOUNT).as("a").on(ARTICLE.ACCOUNT_ID.eq(ACCOUNT.ID)) + .from(Article.class) +// .leftJoin(Account.class).as("a").on(ARTICLE.ACCOUNT_ID.eq(ACCOUNT.ID)) + .leftJoin(Account.class).as("a").on(s -> s.where(Account::getId).eq(Article::getAccountId)) .where(Account::getId).ge(100, If::notEmpty) .and(queryWrapper -> { queryWrapper