!165 feat: add QueryWrapperChain

Merge pull request !165 from 王帅/main
This commit is contained in:
Michael Yang 2023-07-22 06:31:18 +00:00 committed by Gitee
commit 833d4a7664
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
10 changed files with 845 additions and 603 deletions

View File

@ -1,573 +0,0 @@
/*
* Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com).
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mybatisflex.core.query;
import com.mybatisflex.core.constant.SqlOperator;
import com.mybatisflex.core.table.TableDef;
import com.mybatisflex.core.util.LambdaGetter;
import com.mybatisflex.core.util.LambdaUtil;
import java.util.Map;
import java.util.function.Consumer;
/**
* @author michael
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public class QueryChain extends QueryWrapper {
@Override
public WithBuilder<QueryChain> with(String name) {
return (WithBuilder<QueryChain>) super.with(name);
}
@Override
public WithBuilder<QueryChain> with(String name, String... params) {
return (WithBuilder<QueryChain>) super.with(name, params);
}
@Override
public WithBuilder<QueryChain> withRecursive(String name) {
return (WithBuilder<QueryChain>) super.withRecursive(name);
}
@Override
public WithBuilder<QueryChain> withRecursive(String name, String... params) {
return (WithBuilder<QueryChain>) super.withRecursive(name, params);
}
@Override
public QueryChain select() {
super.select();
return this;
}
@Override
public QueryChain select(String... columns) {
super.select(columns);
return this;
}
@Override
public <T> QueryWrapper select(LambdaGetter<T>... lambdaGetters) {
super.select(lambdaGetters);
return this;
}
@Override
public QueryChain select(QueryColumn... queryColumns) {
super.select(queryColumns);
return this;
}
@Override
public QueryChain select(QueryColumn[]... queryColumns) {
super.select(queryColumns);
return this;
}
@Override
public QueryChain from(TableDef... tableDefs) {
super.from(tableDefs);
return this;
}
@Override
public QueryChain from(Class<?>... entityClasses) {
super.from(entityClasses);
return this;
}
@Override
public QueryChain from(String... tables) {
super.from(tables);
return this;
}
@Override
public QueryChain from(QueryTable... tables) {
super.from(tables);
return this;
}
@Override
public QueryChain from(QueryWrapper queryWrapper) {
super.from(queryWrapper);
return this;
}
@Override
public QueryChain as(String alias) {
super.as(alias);
return this;
}
@Override
public QueryChain where(QueryCondition queryCondition) {
super.where(queryCondition);
return this;
}
@Override
public QueryChain where(String sql) {
super.where(sql);
return this;
}
@Override
public QueryChain where(String sql, Object... params) {
super.where(sql, params);
return this;
}
@Override
public QueryChain where(Map<String, Object> whereConditions) {
super.where(whereConditions);
return this;
}
@Override
public QueryChain where(Map<String, Object> whereConditions, Map<String, SqlOperator> operators) {
super.where(whereConditions, operators);
return this;
}
@Override
public <T> QueryConditionBuilder<QueryChain> where(LambdaGetter<T> fn) {
return new QueryConditionBuilder<>(this, LambdaUtil.getQueryColumn(fn), SqlConnector.AND);
}
@Override
public QueryChain and(QueryCondition queryCondition) {
super.and(queryCondition);
return this;
}
@Override
public QueryChain and(String sql) {
super.and(sql);
return this;
}
@Override
public QueryChain and(String sql, Object... params) {
super.and(sql, params);
return this;
}
@Override
public <T> QueryConditionBuilder<QueryChain> and(LambdaGetter<T> fn) {
return new QueryConditionBuilder<>(this, LambdaUtil.getQueryColumn(fn), SqlConnector.AND);
}
@Override
public QueryChain and(Consumer<QueryWrapper> consumer) {
super.and(consumer);
return this;
}
@Override
public QueryChain and(Map<String, Object> whereConditions) {
super.and(whereConditions);
return this;
}
@Override
public QueryChain and(Map<String, Object> whereConditions, Map<String, SqlOperator> operators) {
super.and(whereConditions, operators);
return this;
}
@Override
public QueryChain or(QueryCondition queryCondition) {
super.or(queryCondition);
return this;
}
@Override
public QueryChain or(String sql) {
super.or(sql);
return this;
}
@Override
public QueryChain or(String sql, Object... params) {
super.or(sql, params);
return this;
}
@Override
public <T> QueryConditionBuilder<QueryChain> or(LambdaGetter<T> fn) {
return new QueryConditionBuilder<>(this, LambdaUtil.getQueryColumn(fn), SqlConnector.OR);
}
@Override
public QueryChain or(Consumer<QueryWrapper> consumer) {
super.or(consumer);
return this;
}
@Override
public QueryChain or(Map<String, Object> whereConditions) {
super.or(whereConditions);
return this;
}
@Override
public QueryChain or(Map<String, Object> whereConditions, Map<String, SqlOperator> operators) {
super.or(whereConditions, operators);
return this;
}
@Override
public Joiner<QueryChain> leftJoin(String table) {
return super.leftJoin(table);
}
@Override
public Joiner<QueryChain> leftJoin(String table, boolean when) {
return super.leftJoin(table, when);
}
@Override
public Joiner<QueryChain> leftJoin(Class entityClass) {
return super.leftJoin(entityClass);
}
@Override
public Joiner<QueryChain> leftJoin(Class entityClass, boolean when) {
return super.leftJoin(entityClass, when);
}
@Override
public Joiner<QueryChain> leftJoin(TableDef table) {
return super.leftJoin(table);
}
@Override
public Joiner<QueryChain> leftJoin(TableDef table, boolean when) {
return super.leftJoin(table, when);
}
@Override
public Joiner<QueryChain> leftJoin(QueryWrapper table) {
return super.leftJoin(table);
}
@Override
public Joiner<QueryChain> leftJoin(QueryWrapper table, boolean when) {
return super.leftJoin(table, when);
}
@Override
public Joiner<QueryChain> rightJoin(String table) {
return super.rightJoin(table);
}
@Override
public Joiner<QueryChain> rightJoin(String table, boolean when) {
return super.rightJoin(table, when);
}
@Override
public Joiner<QueryChain> rightJoin(Class entityClass) {
return super.rightJoin(entityClass);
}
@Override
public Joiner<QueryChain> rightJoin(Class entityClass, boolean when) {
return super.rightJoin(entityClass, when);
}
@Override
public Joiner<QueryChain> rightJoin(TableDef table) {
return super.rightJoin(table);
}
@Override
public Joiner<QueryChain> rightJoin(TableDef table, boolean when) {
return super.rightJoin(table, when);
}
@Override
public Joiner<QueryChain> rightJoin(QueryWrapper table) {
return super.rightJoin(table);
}
@Override
public Joiner<QueryChain> rightJoin(QueryWrapper table, boolean when) {
return super.rightJoin(table, when);
}
@Override
public Joiner<QueryChain> innerJoin(String table) {
return super.innerJoin(table);
}
@Override
public Joiner<QueryChain> innerJoin(String table, boolean when) {
return super.innerJoin(table, when);
}
@Override
public Joiner<QueryChain> innerJoin(Class entityClass) {
return super.innerJoin(entityClass);
}
@Override
public Joiner<QueryChain> innerJoin(Class entityClass, boolean when) {
return super.innerJoin(entityClass, when);
}
@Override
public Joiner<QueryChain> innerJoin(TableDef table) {
return super.innerJoin(table);
}
@Override
public Joiner<QueryChain> innerJoin(TableDef table, boolean when) {
return super.innerJoin(table, when);
}
@Override
public Joiner<QueryChain> innerJoin(QueryWrapper table) {
return super.innerJoin(table);
}
@Override
public Joiner<QueryChain> innerJoin(QueryWrapper table, boolean when) {
return super.innerJoin(table, when);
}
@Override
public Joiner<QueryChain> fullJoin(String table) {
return super.fullJoin(table);
}
@Override
public Joiner<QueryChain> fullJoin(String table, boolean when) {
return super.fullJoin(table, when);
}
@Override
public Joiner<QueryChain> fullJoin(Class entityClass) {
return super.fullJoin(entityClass);
}
@Override
public Joiner<QueryChain> fullJoin(Class entityClass, boolean when) {
return super.fullJoin(entityClass, when);
}
@Override
public Joiner<QueryChain> fullJoin(TableDef table) {
return super.fullJoin(table);
}
@Override
public Joiner<QueryChain> fullJoin(TableDef table, boolean when) {
return super.fullJoin(table, when);
}
@Override
public Joiner<QueryChain> fullJoin(QueryWrapper table) {
return super.fullJoin(table);
}
@Override
public Joiner<QueryChain> fullJoin(QueryWrapper table, boolean when) {
return super.fullJoin(table, when);
}
@Override
public Joiner<QueryChain> crossJoin(String table) {
return super.crossJoin(table);
}
@Override
public Joiner<QueryChain> crossJoin(String table, boolean when) {
return super.crossJoin(table, when);
}
@Override
public Joiner<QueryChain> crossJoin(Class entityClass) {
return super.crossJoin(entityClass);
}
@Override
public Joiner<QueryChain> crossJoin(Class entityClass, boolean when) {
return super.crossJoin(entityClass, when);
}
@Override
public Joiner<QueryChain> crossJoin(TableDef table) {
return super.crossJoin(table);
}
@Override
public Joiner<QueryChain> crossJoin(TableDef table, boolean when) {
return super.crossJoin(table, when);
}
@Override
public Joiner<QueryChain> crossJoin(QueryWrapper table) {
return super.crossJoin(table);
}
@Override
public Joiner<QueryChain> crossJoin(QueryWrapper table, boolean when) {
return super.crossJoin(table, when);
}
@Override
public Joiner<QueryChain> join(String table) {
return super.join(table);
}
@Override
public Joiner<QueryChain> join(String table, boolean when) {
return super.join(table, when);
}
@Override
public Joiner<QueryChain> join(Class entityClass) {
return super.join(entityClass);
}
@Override
public Joiner<QueryChain> join(Class entityClass, boolean when) {
return super.join(entityClass, when);
}
@Override
public Joiner<QueryChain> join(TableDef table) {
return super.join(table);
}
@Override
public Joiner<QueryChain> join(TableDef table, boolean when) {
return super.join(table, when);
}
@Override
public Joiner<QueryChain> join(QueryWrapper table) {
return super.join(table);
}
@Override
public Joiner<QueryChain> join(QueryWrapper table, boolean when) {
return super.join(table, when);
}
@Override
public QueryChain union(QueryWrapper unionQuery) {
super.union(unionQuery);
return this;
}
@Override
public QueryChain unionAll(QueryWrapper unionQuery) {
super.unionAll(unionQuery);
return this;
}
@Override
public QueryChain forUpdate() {
super.forUpdate();
return this;
}
@Override
public QueryChain forUpdateNoWait() {
super.forUpdateNoWait();
return this;
}
@Override
public QueryChain groupBy(String name) {
super.groupBy(name);
return this;
}
@Override
public QueryChain groupBy(String... names) {
super.groupBy(names);
return this;
}
@Override
public QueryChain groupBy(QueryColumn column) {
super.groupBy(column);
return this;
}
@Override
public QueryChain groupBy(QueryColumn... columns) {
super.groupBy(columns);
return this;
}
@Override
public QueryChain having(QueryCondition queryCondition) {
super.having(queryCondition);
return this;
}
@Override
public QueryChain orderBy(QueryOrderBy... orderBys) {
super.orderBy(orderBys);
return this;
}
@Override
public QueryChain orderBy(String... orderBys) {
super.orderBy(orderBys);
return this;
}
@Override
public QueryChain limit(Integer rows) {
super.limit(rows);
return this;
}
@Override
public QueryChain offset(Integer offset) {
super.offset(offset);
return this;
}
@Override
public QueryChain limit(Integer offset, Integer rows) {
super.limit(offset, rows);
return this;
}
@Override
public QueryChain datasource(String datasource) {
super.datasource(datasource);
return this;
}
@Override
public QueryChain hint(String hint) {
super.hint(hint);
return this;
}
}

View File

@ -44,33 +44,36 @@ public class QueryWrapper extends BaseQueryWrapper<QueryWrapper> {
return tableInfo.buildQueryWrapper(entity);
}
public WithBuilder<? extends QueryWrapper> with(String name) {
@SuppressWarnings("unchecked")
public <Q extends QueryWrapper> WithBuilder<Q> with(String name) {
if (with == null) {
with = new With();
}
return new WithBuilder<>(this, with, name);
return new WithBuilder<>((Q) this, with, name);
}
public WithBuilder<? extends QueryWrapper> with(String name, String... params) {
@SuppressWarnings("unchecked")
public <Q extends QueryWrapper> WithBuilder<Q> with(String name, String... params) {
if (with == null) {
with = new With();
}
return new WithBuilder<>(this, with, name, Arrays.asList(params));
return new WithBuilder<>((Q) this, with, name, Arrays.asList(params));
}
public WithBuilder<? extends QueryWrapper> withRecursive(String name) {
@SuppressWarnings("unchecked")
public <Q extends QueryWrapper> WithBuilder<Q> withRecursive(String name) {
if (with == null) {
with = new With(true);
}
return new WithBuilder<>(this, with, name);
return new WithBuilder<>((Q) this, with, name);
}
public WithBuilder<? extends QueryWrapper> withRecursive(String name, String... params) {
@SuppressWarnings("unchecked")
public <Q extends QueryWrapper> WithBuilder<Q> withRecursive(String name, String... params) {
if (with == null) {
with = new With(true);
}
return new WithBuilder<>(this, with, name, Arrays.asList(params));
return new WithBuilder<>((Q) this, with, name, Arrays.asList(params));
}
public QueryWrapper select() {
@ -235,7 +238,7 @@ public class QueryWrapper extends BaseQueryWrapper<QueryWrapper> {
return connectMap(whereConditions, operators, SqlConnector.AND, SqlConnector.AND);
}
public QueryWrapper and(Map<String, Object> whereConditions, Map<String, SqlOperator> operators,SqlConnector innerConnector) {
public QueryWrapper and(Map<String, Object> whereConditions, Map<String, SqlOperator> operators, SqlConnector innerConnector) {
return connectMap(whereConditions, operators, SqlConnector.AND, innerConnector);
}
@ -277,12 +280,12 @@ public class QueryWrapper extends BaseQueryWrapper<QueryWrapper> {
return connectMap(whereConditions, operators, SqlConnector.OR, SqlConnector.AND);
}
public QueryWrapper or(Map<String, Object> whereConditions, Map<String, SqlOperator> operators,SqlConnector innerConnector) {
public QueryWrapper or(Map<String, Object> whereConditions, Map<String, SqlOperator> operators, SqlConnector innerConnector) {
return connectMap(whereConditions, operators, SqlConnector.OR, SqlConnector.AND);
}
protected QueryWrapper connectMap(Map<String, Object> mapConditions, Map<String, SqlOperator> operators, SqlConnector outerConnector, SqlConnector innerConnector) {
if (operators == null){
if (operators == null) {
operators = Collections.emptyMap();
}
if (mapConditions != null) {

View File

@ -0,0 +1,590 @@
/*
* Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com).
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mybatisflex.core.query;
import com.mybatisflex.core.constant.SqlOperator;
import com.mybatisflex.core.table.TableDef;
import com.mybatisflex.core.util.LambdaGetter;
import com.mybatisflex.core.util.LambdaUtil;
import java.util.Map;
import java.util.function.Consumer;
/**
* {@link QueryWrapper} 泛型适配器
*
* @param <R> 返回值类型
* @author michael
* @author suomm
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public class QueryWrapperAdapter<R extends QueryWrapperAdapter<R>> extends QueryWrapper {
@Override
public WithBuilder<R> with(String name) {
return super.with(name);
}
@Override
public WithBuilder<R> with(String name, String... params) {
return super.with(name, params);
}
@Override
public WithBuilder<R> withRecursive(String name) {
return super.withRecursive(name);
}
@Override
public WithBuilder<R> withRecursive(String name, String... params) {
return super.withRecursive(name, params);
}
@Override
public R select() {
super.select();
return (R) this;
}
@Override
public R select(String... columns) {
super.select(columns);
return (R) this;
}
@Override
public <T> QueryWrapper select(LambdaGetter<T>... lambdaGetters) {
super.select(lambdaGetters);
return this;
}
@Override
public R select(QueryColumn... queryColumns) {
super.select(queryColumns);
return (R) this;
}
@Override
public R select(QueryColumn[]... queryColumns) {
super.select(queryColumns);
return (R) this;
}
@Override
public R from(TableDef... tableDefs) {
super.from(tableDefs);
return (R) this;
}
@Override
public R from(Class<?>... entityClasses) {
super.from(entityClasses);
return (R) this;
}
@Override
public R from(String... tables) {
super.from(tables);
return (R) this;
}
@Override
public R from(QueryTable... tables) {
super.from(tables);
return (R) this;
}
@Override
public R from(QueryWrapper queryWrapper) {
super.from(queryWrapper);
return (R) this;
}
@Override
public R as(String alias) {
super.as(alias);
return (R) this;
}
@Override
public R where(QueryCondition queryCondition) {
super.where(queryCondition);
return (R) this;
}
@Override
public R where(String sql) {
super.where(sql);
return (R) this;
}
@Override
public R where(String sql, Object... params) {
super.where(sql, params);
return (R) this;
}
@Override
public R where(Map<String, Object> whereConditions) {
super.where(whereConditions);
return (R) this;
}
@Override
public R where(Map<String, Object> whereConditions, Map<String, SqlOperator> operators) {
super.where(whereConditions, operators);
return (R) this;
}
@Override
public <T> QueryConditionBuilder<R> where(LambdaGetter<T> fn) {
return new QueryConditionBuilder<>((R) this, LambdaUtil.getQueryColumn(fn), SqlConnector.AND);
}
@Override
public R and(QueryCondition queryCondition) {
super.and(queryCondition);
return (R) this;
}
@Override
public R and(String sql) {
super.and(sql);
return (R) this;
}
@Override
public R and(String sql, Object... params) {
super.and(sql, params);
return (R) this;
}
@Override
public QueryConditionBuilder<R> and(LambdaGetter fn) {
return super.and(fn);
}
@Override
public R and(Consumer<QueryWrapper> consumer) {
super.and(consumer);
return (R) this;
}
@Override
public R and(Map<String, Object> whereConditions) {
super.and(whereConditions);
return (R) this;
}
@Override
public R and(Map<String, Object> whereConditions, Map<String, SqlOperator> operators) {
super.and(whereConditions, operators);
return (R) this;
}
@Override
public QueryWrapper and(Map<String, Object> whereConditions, Map<String, SqlOperator> operators, SqlConnector innerConnector) {
return super.and(whereConditions, operators, innerConnector);
}
@Override
public R or(QueryCondition queryCondition) {
super.or(queryCondition);
return (R) this;
}
@Override
public R or(String sql) {
super.or(sql);
return (R) this;
}
@Override
public R or(String sql, Object... params) {
super.or(sql, params);
return (R) this;
}
@Override
public QueryConditionBuilder<R> or(LambdaGetter fn) {
return super.or(fn);
}
@Override
public R or(Consumer<QueryWrapper> consumer) {
super.or(consumer);
return (R) this;
}
@Override
public R or(Map<String, Object> whereConditions) {
super.or(whereConditions);
return (R) this;
}
@Override
public R or(Map<String, Object> whereConditions, Map<String, SqlOperator> operators) {
super.or(whereConditions, operators);
return (R) this;
}
@Override
public QueryWrapper or(Map<String, Object> whereConditions, Map<String, SqlOperator> operators, SqlConnector innerConnector) {
return super.or(whereConditions, operators, innerConnector);
}
@Override
public Joiner<R> leftJoin(String table) {
return super.leftJoin(table);
}
@Override
public Joiner<R> leftJoin(String table, boolean when) {
return super.leftJoin(table, when);
}
@Override
public Joiner<R> leftJoin(Class entityClass) {
return super.leftJoin(entityClass);
}
@Override
public Joiner<R> leftJoin(Class entityClass, boolean when) {
return super.leftJoin(entityClass, when);
}
@Override
public Joiner<R> leftJoin(TableDef table) {
return super.leftJoin(table);
}
@Override
public Joiner<R> leftJoin(TableDef table, boolean when) {
return super.leftJoin(table, when);
}
@Override
public Joiner<R> leftJoin(QueryWrapper table) {
return super.leftJoin(table);
}
@Override
public Joiner<R> leftJoin(QueryWrapper table, boolean when) {
return super.leftJoin(table, when);
}
@Override
public Joiner<R> rightJoin(String table) {
return super.rightJoin(table);
}
@Override
public Joiner<R> rightJoin(String table, boolean when) {
return super.rightJoin(table, when);
}
@Override
public Joiner<R> rightJoin(Class entityClass) {
return super.rightJoin(entityClass);
}
@Override
public Joiner<R> rightJoin(Class entityClass, boolean when) {
return super.rightJoin(entityClass, when);
}
@Override
public Joiner<R> rightJoin(TableDef table) {
return super.rightJoin(table);
}
@Override
public Joiner<R> rightJoin(TableDef table, boolean when) {
return super.rightJoin(table, when);
}
@Override
public Joiner<R> rightJoin(QueryWrapper table) {
return super.rightJoin(table);
}
@Override
public Joiner<R> rightJoin(QueryWrapper table, boolean when) {
return super.rightJoin(table, when);
}
@Override
public Joiner<R> innerJoin(String table) {
return super.innerJoin(table);
}
@Override
public Joiner<R> innerJoin(String table, boolean when) {
return super.innerJoin(table, when);
}
@Override
public Joiner<R> innerJoin(Class entityClass) {
return super.innerJoin(entityClass);
}
@Override
public Joiner<R> innerJoin(Class entityClass, boolean when) {
return super.innerJoin(entityClass, when);
}
@Override
public Joiner<R> innerJoin(TableDef table) {
return super.innerJoin(table);
}
@Override
public Joiner<R> innerJoin(TableDef table, boolean when) {
return super.innerJoin(table, when);
}
@Override
public Joiner<R> innerJoin(QueryWrapper table) {
return super.innerJoin(table);
}
@Override
public Joiner<R> innerJoin(QueryWrapper table, boolean when) {
return super.innerJoin(table, when);
}
@Override
public Joiner<R> fullJoin(String table) {
return super.fullJoin(table);
}
@Override
public Joiner<R> fullJoin(String table, boolean when) {
return super.fullJoin(table, when);
}
@Override
public Joiner<R> fullJoin(Class entityClass) {
return super.fullJoin(entityClass);
}
@Override
public Joiner<R> fullJoin(Class entityClass, boolean when) {
return super.fullJoin(entityClass, when);
}
@Override
public Joiner<R> fullJoin(TableDef table) {
return super.fullJoin(table);
}
@Override
public Joiner<R> fullJoin(TableDef table, boolean when) {
return super.fullJoin(table, when);
}
@Override
public Joiner<R> fullJoin(QueryWrapper table) {
return super.fullJoin(table);
}
@Override
public Joiner<R> fullJoin(QueryWrapper table, boolean when) {
return super.fullJoin(table, when);
}
@Override
public Joiner<R> crossJoin(String table) {
return super.crossJoin(table);
}
@Override
public Joiner<R> crossJoin(String table, boolean when) {
return super.crossJoin(table, when);
}
@Override
public Joiner<R> crossJoin(Class entityClass) {
return super.crossJoin(entityClass);
}
@Override
public Joiner<R> crossJoin(Class entityClass, boolean when) {
return super.crossJoin(entityClass, when);
}
@Override
public Joiner<R> crossJoin(TableDef table) {
return super.crossJoin(table);
}
@Override
public Joiner<R> crossJoin(TableDef table, boolean when) {
return super.crossJoin(table, when);
}
@Override
public Joiner<R> crossJoin(QueryWrapper table) {
return super.crossJoin(table);
}
@Override
public Joiner<R> crossJoin(QueryWrapper table, boolean when) {
return super.crossJoin(table, when);
}
@Override
public Joiner<R> join(String table) {
return super.join(table);
}
@Override
public Joiner<R> join(String table, boolean when) {
return super.join(table, when);
}
@Override
public Joiner<R> join(Class entityClass) {
return super.join(entityClass);
}
@Override
public Joiner<R> join(Class entityClass, boolean when) {
return super.join(entityClass, when);
}
@Override
public Joiner<R> join(TableDef table) {
return super.join(table);
}
@Override
public Joiner<R> join(TableDef table, boolean when) {
return super.join(table, when);
}
@Override
public Joiner<R> join(QueryWrapper table) {
return super.join(table);
}
@Override
public Joiner<R> join(QueryWrapper table, boolean when) {
return super.join(table, when);
}
@Override
public R union(QueryWrapper unionQuery) {
super.union(unionQuery);
return (R) this;
}
@Override
public R unionAll(QueryWrapper unionQuery) {
super.unionAll(unionQuery);
return (R) this;
}
@Override
public R forUpdate() {
super.forUpdate();
return (R) this;
}
@Override
public R forUpdateNoWait() {
super.forUpdateNoWait();
return (R) this;
}
@Override
public R groupBy(String name) {
super.groupBy(name);
return (R) this;
}
@Override
public R groupBy(String... names) {
super.groupBy(names);
return (R) this;
}
@Override
public R groupBy(QueryColumn column) {
super.groupBy(column);
return (R) this;
}
@Override
public R groupBy(QueryColumn... columns) {
super.groupBy(columns);
return (R) this;
}
@Override
public R having(QueryCondition queryCondition) {
super.having(queryCondition);
return (R) this;
}
@Override
public R orderBy(QueryOrderBy... orderBys) {
super.orderBy(orderBys);
return (R) this;
}
@Override
public R orderBy(String... orderBys) {
super.orderBy(orderBys);
return (R) this;
}
@Override
public R limit(Integer rows) {
super.limit(rows);
return (R) this;
}
@Override
public R offset(Integer offset) {
super.offset(offset);
return (R) this;
}
@Override
public R limit(Integer offset, Integer rows) {
super.limit(offset, rows);
return (R) this;
}
@Override
public R datasource(String datasource) {
super.datasource(datasource);
return (R) this;
}
@Override
public R hint(String hint) {
super.hint(hint);
return (R) this;
}
@Override
public R clone() {
return (R) super.clone();
}
}

View File

@ -0,0 +1,128 @@
/*
* Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com).
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mybatisflex.core.query;
import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.util.SqlUtil;
import java.util.List;
import java.util.Optional;
/**
* {@link QueryWrapper}链式调用
*
* @author 王帅
* @since 2023-07-22
*/
public class QueryWrapperChain<T> extends QueryWrapperAdapter<QueryWrapperChain<T>> {
private final BaseMapper<T> baseMapper;
public QueryWrapperChain(BaseMapper<T> baseMapper) {
this.baseMapper = baseMapper;
}
public static <E> QueryWrapperChain<E> create(BaseMapper<E> baseMapper) {
return new QueryWrapperChain<>(baseMapper);
}
public boolean remove() {
return SqlUtil.toBool(baseMapper.deleteByQuery(this));
}
public boolean update(T entity) {
return SqlUtil.toBool(baseMapper.updateByQuery(entity, this));
}
public boolean update(T entity, boolean ignoreNulls) {
return SqlUtil.toBool(baseMapper.updateByQuery(entity, ignoreNulls, this));
}
public long count() {
return baseMapper.selectCountByQuery(this);
}
public boolean exists() {
return SqlUtil.toBool(count());
}
public T one() {
return baseMapper.selectOneByQuery(this);
}
public <R> R oneAs(Class<R> asType) {
return baseMapper.selectOneByQueryAs(this, asType);
}
public T oneWithRelations() {
return baseMapper.selectOneWithRelationsByQuery(this);
}
public <R> R oneWithRelationsAs(Class<R> asType) {
return baseMapper.selectOneWithRelationsByQueryAs(this, asType);
}
public Optional<T> oneOpt() {
return Optional.ofNullable(baseMapper.selectOneByQuery(this));
}
public <R> Optional<R> oneAsOpt(Class<R> asType) {
return Optional.ofNullable(baseMapper.selectOneByQueryAs(this, asType));
}
public Optional<T> oneWithRelationsOpt() {
return Optional.ofNullable(baseMapper.selectOneWithRelationsByQuery(this));
}
public <R> Optional<R> oneWithRelationsAsOpt(Class<R> asType) {
return Optional.ofNullable(baseMapper.selectOneWithRelationsByQueryAs(this, asType));
}
public List<T> list() {
return baseMapper.selectListByQuery(this);
}
public List<T> listWithRelations() {
return baseMapper.selectListWithRelationsByQuery(this);
}
public <R> List<R> listAs(Class<R> asType) {
return baseMapper.selectListByQueryAs(this, asType);
}
public <R> List<R> listWithRelationsAs(Class<R> asType) {
return baseMapper.selectListWithRelationsByQueryAs(this, asType);
}
public Page<T> page(Page<T> page) {
return baseMapper.paginate(page, this);
}
public Page<T> pageWithRelations(Page<T> page) {
return baseMapper.paginateWithRelations(page, this);
}
public <R> Page<R> pageAs(Page<R> page, Class<R> asType) {
return baseMapper.paginateAs(page, this, asType);
}
public <R> Page<R> pageWithRelationsAs(Page<R> page, Class<R> asType) {
return baseMapper.paginateWithRelationsAs(page, this, asType);
}
}

View File

@ -20,6 +20,7 @@ import com.mybatisflex.core.exception.FlexExceptions;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryCondition;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.query.QueryWrapperChain;
import com.mybatisflex.core.row.Db;
import com.mybatisflex.core.util.ClassUtil;
import com.mybatisflex.core.util.CollectionUtil;
@ -528,4 +529,8 @@ public interface IService<T> {
return QueryWrapper.create();
}
default QueryWrapperChain<T> queryChain() {
return new QueryWrapperChain<>(getMapper());
}
}

View File

@ -1,17 +0,0 @@
package com.mybatisflex.coretest;
import com.mybatisflex.core.query.QueryChain;
import org.junit.Test;
public class QueryChainTest {
@Test
public void test() {
QueryChain queryChain = new QueryChain();
queryChain.from("aaa")
.leftJoin("bbb").on("aaa.id = bbb.x")
.where(Account::getId).ge(100);
System.out.println(queryChain.toSQL());
}
}

View File

@ -0,0 +1,28 @@
/*
* Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com).
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mybatisflex.test.service;
import com.mybatisflex.core.service.IService;
import com.mybatisflex.test.model.Article;
/**
* @author 王帅
* @since 2023-07-22
*/
public interface ArticleService extends IService<Article> {
}

View File

@ -0,0 +1,32 @@
/*
* Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com).
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mybatisflex.test.service.impl;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.mybatisflex.test.mapper.ArticleMapper;
import com.mybatisflex.test.model.Article;
import com.mybatisflex.test.service.ArticleService;
import org.springframework.stereotype.Service;
/**
* @author 王帅
* @since 2023-07-22
*/
@Service
public class ArticleServiceImpl extends ServiceImpl<ArticleMapper, Article> implements ArticleService {
}

View File

@ -7,7 +7,7 @@ spring:
# driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/flex_test
username: root
password: 123456
password: 12345678
# driver-class-name:
# datasource:
# driver-class-name: org.h2.Driver

View File

@ -0,0 +1,46 @@
/*
* Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com).
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mybatisflex.test.service;
import com.mybatisflex.test.model.Article;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static com.mybatisflex.test.model.table.ArticleTableDef.ARTICLE;
/**
* @author 王帅
* @since 2023-07-22
*/
@SpringBootTest
class ArticleServiceTest {
@Autowired
ArticleService articleService;
@Test
void testChain() {
articleService.queryChain()
.select(ARTICLE.ALL_COLUMNS)
.from(ARTICLE)
.where(Article::getAccountId).eq(1)
.list()
.forEach(System.out::println);
}
}