mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-06 16:48:24 +08:00
feat: add lambda query
This commit is contained in:
parent
232a25776a
commit
71bca6c6ee
@ -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<M> {
|
||||
join.on(on);
|
||||
return queryWrapper;
|
||||
}
|
||||
|
||||
public M on(Consumer<QueryWrapper> consumer) {
|
||||
QueryWrapper newWrapper = new QueryWrapper();
|
||||
consumer.accept(newWrapper);
|
||||
join.on(newWrapper.whereQueryCondition);
|
||||
return queryWrapper;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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 <T> QueryWrapper eq(LambdaGetter<T> value) {
|
||||
return eq(LambdaUtil.getQueryColumn(value));
|
||||
}
|
||||
|
||||
|
||||
public <T> QueryWrapper eq(LambdaGetter<T> value, Predicate<T> when) {
|
||||
return eq(LambdaUtil.getQueryColumn(value), when);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* not equals !=
|
||||
*
|
||||
@ -70,6 +83,15 @@ public class LambdaConditionBuilder {
|
||||
return queryWrapper;
|
||||
}
|
||||
|
||||
public <T> QueryWrapper ne(LambdaGetter<T> value) {
|
||||
return ne(LambdaUtil.getQueryColumn(value));
|
||||
}
|
||||
|
||||
|
||||
public <T> QueryWrapper ne(LambdaGetter<T> value, Predicate<T> when) {
|
||||
return ne(LambdaUtil.getQueryColumn(value), when);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* like %%
|
||||
@ -139,6 +161,16 @@ public class LambdaConditionBuilder {
|
||||
return queryWrapper;
|
||||
}
|
||||
|
||||
public <T> QueryWrapper gt(LambdaGetter<T> value) {
|
||||
return gt(LambdaUtil.getQueryColumn(value));
|
||||
}
|
||||
|
||||
|
||||
public <T> QueryWrapper gt(LambdaGetter<T> value, Predicate<T> when) {
|
||||
return gt(LambdaUtil.getQueryColumn(value), when);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 大于等于 greater or equal
|
||||
*
|
||||
@ -158,6 +190,15 @@ public class LambdaConditionBuilder {
|
||||
return queryWrapper;
|
||||
}
|
||||
|
||||
public <T> QueryWrapper ge(LambdaGetter<T> value) {
|
||||
return ge(LambdaUtil.getQueryColumn(value));
|
||||
}
|
||||
|
||||
|
||||
public <T> QueryWrapper ge(LambdaGetter<T> value, Predicate<T> when) {
|
||||
return ge(LambdaUtil.getQueryColumn(value), when);
|
||||
}
|
||||
|
||||
/**
|
||||
* 小于 less than
|
||||
*
|
||||
@ -177,6 +218,15 @@ public class LambdaConditionBuilder {
|
||||
return queryWrapper;
|
||||
}
|
||||
|
||||
public <T> QueryWrapper lt(LambdaGetter<T> value) {
|
||||
return lt(LambdaUtil.getQueryColumn(value));
|
||||
}
|
||||
|
||||
|
||||
public <T> QueryWrapper lt(LambdaGetter<T> value, Predicate<T> when) {
|
||||
return lt(LambdaUtil.getQueryColumn(value), when);
|
||||
}
|
||||
|
||||
/**
|
||||
* 小于等于 less or equal
|
||||
*
|
||||
@ -189,6 +239,7 @@ public class LambdaConditionBuilder {
|
||||
return queryWrapper;
|
||||
}
|
||||
|
||||
|
||||
public <T> QueryWrapper le(Object value, Predicate<T> when) {
|
||||
if (value != null) {
|
||||
queryWrapper.addWhereQueryCondition(queryColumn.le(value, when), connector);
|
||||
@ -196,6 +247,15 @@ public class LambdaConditionBuilder {
|
||||
return queryWrapper;
|
||||
}
|
||||
|
||||
public <T> QueryWrapper le(LambdaGetter<T> value) {
|
||||
return le(LambdaUtil.getQueryColumn(value));
|
||||
}
|
||||
|
||||
|
||||
public <T> QueryWrapper le(LambdaGetter<T> value, Predicate<T> when) {
|
||||
return le(LambdaUtil.getQueryColumn(value), when);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* IS NULL
|
||||
@ -365,6 +425,7 @@ public class LambdaConditionBuilder {
|
||||
return queryWrapper;
|
||||
}
|
||||
|
||||
|
||||
public <T> QueryWrapper between(Object start, Object end, Predicate<T> when) {
|
||||
if (queryWrapper != null) {
|
||||
queryWrapper.addWhereQueryCondition(queryColumn.between(start, end, when), connector);
|
||||
@ -137,8 +137,8 @@ public class QueryWrapper extends BaseQueryWrapper<QueryWrapper> {
|
||||
return this;
|
||||
}
|
||||
|
||||
public <T> LambdaConditionBuilder where(LambdaGetter<T> fn) {
|
||||
return new LambdaConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.AND);
|
||||
public <T> QueryConditionBuilder where(LambdaGetter<T> fn) {
|
||||
return new QueryConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.AND);
|
||||
}
|
||||
|
||||
public QueryWrapper and(QueryCondition queryCondition) {
|
||||
@ -155,8 +155,8 @@ public class QueryWrapper extends BaseQueryWrapper<QueryWrapper> {
|
||||
return this;
|
||||
}
|
||||
|
||||
public <T> LambdaConditionBuilder and(LambdaGetter<T> fn) {
|
||||
return new LambdaConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.AND);
|
||||
public <T> QueryConditionBuilder and(LambdaGetter<T> fn) {
|
||||
return new QueryConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.AND);
|
||||
}
|
||||
|
||||
|
||||
@ -184,6 +184,10 @@ public class QueryWrapper extends BaseQueryWrapper<QueryWrapper> {
|
||||
return this;
|
||||
}
|
||||
|
||||
public <T> QueryConditionBuilder or(LambdaGetter<T> fn) {
|
||||
return new QueryConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.OR);
|
||||
}
|
||||
|
||||
public QueryWrapper or(Consumer<QueryWrapper> consumer) {
|
||||
QueryWrapper newWrapper = new QueryWrapper();
|
||||
consumer.accept(newWrapper);
|
||||
@ -194,11 +198,6 @@ public class QueryWrapper extends BaseQueryWrapper<QueryWrapper> {
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public <T> LambdaConditionBuilder or(LambdaGetter<T> fn) {
|
||||
return new LambdaConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.OR);
|
||||
}
|
||||
|
||||
public Joiner<QueryWrapper> leftJoin(String table) {
|
||||
return joining(Join.TYPE_LEFT, new QueryTable(table), true);
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user