mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 00:58: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;
|
package com.mybatisflex.core.query;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author michael yang (fuhai999@gmail.com)
|
* @author michael yang (fuhai999@gmail.com)
|
||||||
* @Date: 2020/1/14
|
* @Date: 2020/1/14
|
||||||
@ -43,5 +45,12 @@ public class Joiner<M> {
|
|||||||
join.on(on);
|
join.on(on);
|
||||||
return queryWrapper;
|
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;
|
package com.mybatisflex.core.query;
|
||||||
|
|
||||||
|
import com.mybatisflex.core.util.LambdaGetter;
|
||||||
|
import com.mybatisflex.core.util.LambdaUtil;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
public class LambdaConditionBuilder {
|
public class QueryConditionBuilder {
|
||||||
|
|
||||||
private QueryWrapper queryWrapper;
|
private QueryWrapper queryWrapper;
|
||||||
private QueryColumn queryColumn;
|
private QueryColumn queryColumn;
|
||||||
private SqlConnector connector;
|
private SqlConnector connector;
|
||||||
|
|
||||||
public LambdaConditionBuilder(QueryWrapper queryWrapper, QueryColumn queryColumn, SqlConnector connector) {
|
public QueryConditionBuilder(QueryWrapper queryWrapper, QueryColumn queryColumn, SqlConnector connector) {
|
||||||
this.queryWrapper = queryWrapper;
|
this.queryWrapper = queryWrapper;
|
||||||
this.queryColumn = queryColumn;
|
this.queryColumn = queryColumn;
|
||||||
this.connector = connector;
|
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 !=
|
* not equals !=
|
||||||
*
|
*
|
||||||
@ -70,6 +83,15 @@ public class LambdaConditionBuilder {
|
|||||||
return queryWrapper;
|
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 %%
|
* like %%
|
||||||
@ -139,6 +161,16 @@ public class LambdaConditionBuilder {
|
|||||||
return queryWrapper;
|
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
|
* 大于等于 greater or equal
|
||||||
*
|
*
|
||||||
@ -158,6 +190,15 @@ public class LambdaConditionBuilder {
|
|||||||
return queryWrapper;
|
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
|
* 小于 less than
|
||||||
*
|
*
|
||||||
@ -177,6 +218,15 @@ public class LambdaConditionBuilder {
|
|||||||
return queryWrapper;
|
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
|
* 小于等于 less or equal
|
||||||
*
|
*
|
||||||
@ -189,6 +239,7 @@ public class LambdaConditionBuilder {
|
|||||||
return queryWrapper;
|
return queryWrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public <T> QueryWrapper le(Object value, Predicate<T> when) {
|
public <T> QueryWrapper le(Object value, Predicate<T> when) {
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
queryWrapper.addWhereQueryCondition(queryColumn.le(value, when), connector);
|
queryWrapper.addWhereQueryCondition(queryColumn.le(value, when), connector);
|
||||||
@ -196,6 +247,15 @@ public class LambdaConditionBuilder {
|
|||||||
return queryWrapper;
|
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
|
* IS NULL
|
||||||
@ -365,6 +425,7 @@ public class LambdaConditionBuilder {
|
|||||||
return queryWrapper;
|
return queryWrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public <T> QueryWrapper between(Object start, Object end, Predicate<T> when) {
|
public <T> QueryWrapper between(Object start, Object end, Predicate<T> when) {
|
||||||
if (queryWrapper != null) {
|
if (queryWrapper != null) {
|
||||||
queryWrapper.addWhereQueryCondition(queryColumn.between(start, end, when), connector);
|
queryWrapper.addWhereQueryCondition(queryColumn.between(start, end, when), connector);
|
||||||
@ -137,8 +137,8 @@ public class QueryWrapper extends BaseQueryWrapper<QueryWrapper> {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T> LambdaConditionBuilder where(LambdaGetter<T> fn) {
|
public <T> QueryConditionBuilder where(LambdaGetter<T> fn) {
|
||||||
return new LambdaConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.AND);
|
return new QueryConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.AND);
|
||||||
}
|
}
|
||||||
|
|
||||||
public QueryWrapper and(QueryCondition queryCondition) {
|
public QueryWrapper and(QueryCondition queryCondition) {
|
||||||
@ -155,8 +155,8 @@ public class QueryWrapper extends BaseQueryWrapper<QueryWrapper> {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T> LambdaConditionBuilder and(LambdaGetter<T> fn) {
|
public <T> QueryConditionBuilder and(LambdaGetter<T> fn) {
|
||||||
return new LambdaConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.AND);
|
return new QueryConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.AND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -184,6 +184,10 @@ public class QueryWrapper extends BaseQueryWrapper<QueryWrapper> {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public <T> QueryConditionBuilder or(LambdaGetter<T> fn) {
|
||||||
|
return new QueryConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.OR);
|
||||||
|
}
|
||||||
|
|
||||||
public QueryWrapper or(Consumer<QueryWrapper> consumer) {
|
public QueryWrapper or(Consumer<QueryWrapper> consumer) {
|
||||||
QueryWrapper newWrapper = new QueryWrapper();
|
QueryWrapper newWrapper = new QueryWrapper();
|
||||||
consumer.accept(newWrapper);
|
consumer.accept(newWrapper);
|
||||||
@ -194,11 +198,6 @@ public class QueryWrapper extends BaseQueryWrapper<QueryWrapper> {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public <T> LambdaConditionBuilder or(LambdaGetter<T> fn) {
|
|
||||||
return new LambdaConditionBuilder(this, LambdaUtil.getQueryColumn(fn), SqlConnector.OR);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Joiner<QueryWrapper> leftJoin(String table) {
|
public Joiner<QueryWrapper> leftJoin(String table) {
|
||||||
return joining(Join.TYPE_LEFT, new QueryTable(table), true);
|
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 javax.sql.DataSource;
|
||||||
|
|
||||||
import static com.mybatisflex.test.table.AccountTableDef.ACCOUNT;
|
|
||||||
import static com.mybatisflex.test.table.ArticleTableDef.ARTICLE;
|
|
||||||
|
|
||||||
public class EntityTestStarter {
|
public class EntityTestStarter {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
@ -117,8 +114,9 @@ public class EntityTestStarter {
|
|||||||
// , ACCOUNT.AGE.as(ArticleDTO::getAuthorAge)
|
// , ACCOUNT.AGE.as(ArticleDTO::getAuthorAge)
|
||||||
// , ACCOUNT.BIRTHDAY
|
// , ACCOUNT.BIRTHDAY
|
||||||
// )
|
// )
|
||||||
.from(ARTICLE)
|
.from(Article.class)
|
||||||
.leftJoin(ACCOUNT).as("a").on(ARTICLE.ACCOUNT_ID.eq(ACCOUNT.ID))
|
// .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)
|
.where(Account::getId).ge(100, If::notEmpty)
|
||||||
.and(queryWrapper -> {
|
.and(queryWrapper -> {
|
||||||
queryWrapper
|
queryWrapper
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user