From ed4449916188cc031aa09535a8de504684efda53 Mon Sep 17 00:00:00 2001 From: admin <570810310@qq.com> Date: Tue, 2 Feb 2021 15:10:50 +0800 Subject: [PATCH] update --- .../github/mybatisplus/base/MyBaseMapper.java | 13 +- .../mybatisplus/base/MyBaseService.java | 13 +- .../mybatisplus/base/MyBaseServiceImpl.java | 13 +- .../mybatisplus/interfaces/BaseJoin.java | 4 + .../query/MyAbstractLambdaWrapper.java | 3 +- .../mybatisplus/query/MyAbstractWrapper.java | 528 ------------------ .../query/MyLambdaQueryWrapper.java | 14 +- .../mybatisplus/query/MyQueryWrapper.java | 24 +- .../mybatisplus/query/interfaces/MyJoin.java | 3 +- .../wrapper/MyAbstractWrapper.java | 2 +- .../wrapper/MyJoinLambdaQueryWrapper.java | 6 +- .../github/mybatisplus/wrapper/MyWrapper.java | 170 ------ .../wrapper/interfaces/MyLambdaJoin.java | 3 +- 13 files changed, 65 insertions(+), 731 deletions(-) create mode 100644 src/main/java/com/github/mybatisplus/interfaces/BaseJoin.java delete mode 100644 src/main/java/com/github/mybatisplus/query/MyAbstractWrapper.java delete mode 100644 src/main/java/com/github/mybatisplus/wrapper/MyWrapper.java diff --git a/src/main/java/com/github/mybatisplus/base/MyBaseMapper.java b/src/main/java/com/github/mybatisplus/base/MyBaseMapper.java index c31d958..b9e457f 100644 --- a/src/main/java/com/github/mybatisplus/base/MyBaseMapper.java +++ b/src/main/java/com/github/mybatisplus/base/MyBaseMapper.java @@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.github.mybatisplus.toolkit.Constant; -import com.github.mybatisplus.wrapper.MyWrapper; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -23,14 +22,14 @@ public interface MyBaseMapper extends BaseMapper { * @param clazz resultType */ DTO selectJoinOne(@Param(Constant.CLAZZ) Class clazz, - @Param(Constants.WRAPPER) MyWrapper myWrapper); + @Param(Constants.WRAPPER) BaseJoin myWrapper); /** * 连表查询返回Map * * @param myWrapper joinWrapper */ - Map selectJoinMap(@Param(Constants.WRAPPER) MyWrapper myWrapper); + Map selectJoinMap(@Param(Constants.WRAPPER) BaseJoin myWrapper); /** * 连表查询返回记录集合 @@ -39,14 +38,14 @@ public interface MyBaseMapper extends BaseMapper { * @param clazz resultType */ List selectJoinList(@Param(Constant.CLAZZ) Class clazz, - @Param(Constants.WRAPPER) MyWrapper myWrapper); + @Param(Constants.WRAPPER) BaseJoin myWrapper); /** * 连表查询返回Map集合 * * @param myWrapper joinWrapper */ - List> selectJoinMaps(@Param(Constants.WRAPPER) MyWrapper myWrapper); + List> selectJoinMaps(@Param(Constants.WRAPPER) BaseJoin myWrapper); /** * 连表查询返回记录集合并分页 @@ -57,7 +56,7 @@ public interface MyBaseMapper extends BaseMapper { */ > IPage selectJoinPage(P page, @Param(Constant.CLAZZ) Class clazz, - @Param(Constants.WRAPPER) MyWrapper myWrapper); + @Param(Constants.WRAPPER) BaseJoin myWrapper); /** * 连表查询返回Map集合并分页 @@ -65,5 +64,5 @@ public interface MyBaseMapper extends BaseMapper { * @param myWrapper joinWrapper */

> IPage> selectJoinMapsPage(P page, - @Param(Constants.WRAPPER) MyWrapper myWrapper); + @Param(Constants.WRAPPER) BaseJoin myWrapper); } diff --git a/src/main/java/com/github/mybatisplus/base/MyBaseService.java b/src/main/java/com/github/mybatisplus/base/MyBaseService.java index b669234..08ae6c7 100644 --- a/src/main/java/com/github/mybatisplus/base/MyBaseService.java +++ b/src/main/java/com/github/mybatisplus/base/MyBaseService.java @@ -2,7 +2,6 @@ package com.github.mybatisplus.base; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; -import com.github.mybatisplus.wrapper.MyWrapper; import java.util.List; import java.util.Map; @@ -16,31 +15,31 @@ public interface MyBaseService extends IService { /** * 连接查询返回一条记录 */ - DTO selectJoinOne(Class clazz, MyWrapper wrapper); + DTO selectJoinOne(Class clazz, BaseJoin wrapper); /** * 连接查询返回集合 */ - List selectJoinList(Class clazz, MyWrapper wrapper); + List selectJoinList(Class clazz, BaseJoin wrapper); /** * 连接查询返回集合并分页 */ - > IPage selectJoinListPage(P page, Class clazz, MyWrapper wrapper); + > IPage selectJoinListPage(P page, Class clazz, BaseJoin wrapper); /** * 连接查询返回Map */ - Map selectJoinMap(MyWrapper wrapper); + Map selectJoinMap(BaseJoin wrapper); /** * 连接查询返回Map集合 */ - List> selectJoinMaps(MyWrapper wrapper); + List> selectJoinMaps(BaseJoin wrapper); /** * 连接查询返回Map集合并分页 */ - IPage> selectJoinMapsPage(IPage> page, MyWrapper wrapper); + IPage> selectJoinMapsPage(IPage> page, BaseJoin wrapper); } diff --git a/src/main/java/com/github/mybatisplus/base/MyBaseServiceImpl.java b/src/main/java/com/github/mybatisplus/base/MyBaseServiceImpl.java index 41f4f2e..3fed81e 100644 --- a/src/main/java/com/github/mybatisplus/base/MyBaseServiceImpl.java +++ b/src/main/java/com/github/mybatisplus/base/MyBaseServiceImpl.java @@ -2,7 +2,6 @@ package com.github.mybatisplus.base; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.github.mybatisplus.wrapper.MyWrapper; import java.util.List; import java.util.Map; @@ -15,33 +14,33 @@ public class MyBaseServiceImpl, T> extends ServiceImpl @Override - public DTO selectJoinOne(Class clazz, MyWrapper wrapper) { + public DTO selectJoinOne(Class clazz, BaseJoin wrapper) { return baseMapper.selectJoinOne(clazz, wrapper); } @Override - public List selectJoinList(Class clazz, MyWrapper wrapper) { + public List selectJoinList(Class clazz, BaseJoin wrapper) { return baseMapper.selectJoinList(clazz, wrapper); } @Override - public > IPage selectJoinListPage(P page, Class clazz, MyWrapper wrapper) { + public > IPage selectJoinListPage(P page, Class clazz, BaseJoin wrapper) { return baseMapper.selectJoinPage(page, clazz, wrapper); } @Override - public Map selectJoinMap(MyWrapper wrapper) { + public Map selectJoinMap(BaseJoin wrapper) { return baseMapper.selectJoinMap(wrapper); } @Override - public List> selectJoinMaps(MyWrapper wrapper) { + public List> selectJoinMaps(BaseJoin wrapper) { return baseMapper.selectJoinMaps(wrapper); } @Override - public IPage> selectJoinMapsPage(IPage> page, MyWrapper wrapper) { + public IPage> selectJoinMapsPage(IPage> page, BaseJoin wrapper) { return baseMapper.selectJoinMapsPage(page, wrapper); } diff --git a/src/main/java/com/github/mybatisplus/interfaces/BaseJoin.java b/src/main/java/com/github/mybatisplus/interfaces/BaseJoin.java new file mode 100644 index 0000000..da5bba7 --- /dev/null +++ b/src/main/java/com/github/mybatisplus/interfaces/BaseJoin.java @@ -0,0 +1,4 @@ +package com.github.mybatisplus.interfaces; + +public interface BaseJoin { +} diff --git a/src/main/java/com/github/mybatisplus/query/MyAbstractLambdaWrapper.java b/src/main/java/com/github/mybatisplus/query/MyAbstractLambdaWrapper.java index 8ce6ed2..b94863b 100644 --- a/src/main/java/com/github/mybatisplus/query/MyAbstractLambdaWrapper.java +++ b/src/main/java/com/github/mybatisplus/query/MyAbstractLambdaWrapper.java @@ -1,5 +1,6 @@ package com.github.mybatisplus.query; +import com.baomidou.mybatisplus.core.conditions.AbstractWrapper; import com.baomidou.mybatisplus.core.toolkit.Assert; import com.baomidou.mybatisplus.core.toolkit.LambdaUtils; import com.baomidou.mybatisplus.core.toolkit.StringPool; @@ -19,7 +20,7 @@ import static java.util.stream.Collectors.joining; */ @SuppressWarnings("serial") public abstract class MyAbstractLambdaWrapper> - extends MyAbstractWrapper, Children> { + extends AbstractWrapper, Children> { private Map columnMap = null; private boolean initColumnMap = false; diff --git a/src/main/java/com/github/mybatisplus/query/MyAbstractWrapper.java b/src/main/java/com/github/mybatisplus/query/MyAbstractWrapper.java deleted file mode 100644 index 8637d42..0000000 --- a/src/main/java/com/github/mybatisplus/query/MyAbstractWrapper.java +++ /dev/null @@ -1,528 +0,0 @@ -package com.github.mybatisplus.query; - -import com.baomidou.mybatisplus.core.conditions.ISqlSegment; -import com.baomidou.mybatisplus.core.conditions.SharedString; -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.conditions.interfaces.Compare; -import com.baomidou.mybatisplus.core.conditions.interfaces.Func; -import com.baomidou.mybatisplus.core.conditions.interfaces.Join; -import com.baomidou.mybatisplus.core.conditions.interfaces.Nested; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments; -import com.baomidou.mybatisplus.core.enums.SqlKeyword; -import com.baomidou.mybatisplus.core.enums.SqlLike; -import com.baomidou.mybatisplus.core.toolkit.*; -import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils; -import com.baomidou.mybatisplus.core.toolkit.sql.StringEscape; -import com.github.mybatisplus.query.interfaces.MyJoin; -import com.github.mybatisplus.toolkit.Constant; -import com.github.mybatisplus.wrapper.MyWrapper; - -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.function.BiPredicate; -import java.util.function.Consumer; - -import static com.baomidou.mybatisplus.core.enums.SqlKeyword.*; -import static com.baomidou.mybatisplus.core.enums.WrapperKeyword.APPLY; -import static java.util.stream.Collectors.joining; - -/** - * copy {@link com.baomidou.mybatisplus.core.conditions.AbstractWrapper} - */ -@SuppressWarnings({"serial", "unchecked"}) -public abstract class MyAbstractWrapper> extends MyWrapper - implements Compare, Nested, Join, Func, - MyJoin { - - /** - * 占位符 - */ - protected final Children typedThis = (Children) this; - /** - * 必要度量 - */ - protected AtomicInteger paramNameSeq; - protected Map paramNameValuePairs; - protected SharedString lastSql; - /** - * SQL注释 - */ - protected SharedString sqlComment; - /** - * SQL起始语句 - */ - protected SharedString sqlFirst; - - /** - * 连表字段 - */ - protected SharedString from = SharedString.emptyString(); - /** - * ß - * 数据库表映射实体类 - */ - private T entity; - protected MergeSegments expression; - /** - * 实体类型(主要用于确定泛型以及取TableInfo缓存) - */ - private Class entityClass; - - @Override - public T getEntity() { - return entity; - } - - public Children setEntity(T entity) { - this.entity = entity; - return typedThis; - } - - public Class getEntityClass() { - if (entityClass == null && entity != null) { - entityClass = (Class) entity.getClass(); - } - return entityClass; - } - - public Children setEntityClass(Class entityClass) { - if (entityClass != null) { - this.entityClass = entityClass; - } - return typedThis; - } - - @Override - public Children allEq(boolean condition, Map params, boolean null2IsNull) { - if (condition && CollectionUtils.isNotEmpty(params)) { - params.forEach((k, v) -> { - if (StringUtils.checkValNotNull(v)) { - eq(k, v); - } else { - if (null2IsNull) { - isNull(k); - } - } - }); - } - return typedThis; - } - - @Override - public Children allEq(boolean condition, BiPredicate filter, Map params, boolean null2IsNull) { - if (condition && CollectionUtils.isNotEmpty(params)) { - params.forEach((k, v) -> { - if (filter.test(k, v)) { - if (StringUtils.checkValNotNull(v)) { - eq(k, v); - } else { - if (null2IsNull) { - isNull(k); - } - } - } - }); - } - return typedThis; - } - - @Override - public Children eq(boolean condition, R column, Object val) { - return addCondition(condition, column, EQ, val); - } - - @Override - public Children ne(boolean condition, R column, Object val) { - return addCondition(condition, column, NE, val); - } - - @Override - public Children gt(boolean condition, R column, Object val) { - return addCondition(condition, column, GT, val); - } - - @Override - public Children ge(boolean condition, R column, Object val) { - return addCondition(condition, column, GE, val); - } - - @Override - public Children lt(boolean condition, R column, Object val) { - return addCondition(condition, column, LT, val); - } - - @Override - public Children le(boolean condition, R column, Object val) { - return addCondition(condition, column, LE, val); - } - - @Override - public Children like(boolean condition, R column, Object val) { - return likeValue(condition, LIKE, column, val, SqlLike.DEFAULT); - } - - @Override - public Children notLike(boolean condition, R column, Object val) { - return likeValue(condition, NOT_LIKE, column, val, SqlLike.DEFAULT); - } - - @Override - public Children likeLeft(boolean condition, R column, Object val) { - return likeValue(condition, LIKE, column, val, SqlLike.LEFT); - } - - @Override - public Children likeRight(boolean condition, R column, Object val) { - return likeValue(condition, LIKE, column, val, SqlLike.RIGHT); - } - - @Override - public Children between(boolean condition, R column, Object val1, Object val2) { - return doIt(condition, () -> columnToString(column), BETWEEN, () -> formatSql("{0}", val1), AND, - () -> formatSql("{0}", val2)); - } - - @Override - public Children notBetween(boolean condition, R column, Object val1, Object val2) { - return doIt(condition, () -> columnToString(column), NOT_BETWEEN, () -> formatSql("{0}", val1), AND, - () -> formatSql("{0}", val2)); - } - - @Override - public Children and(boolean condition, Consumer consumer) { - return and(condition).addNestedCondition(condition, consumer); - } - - @Override - public Children or(boolean condition, Consumer consumer) { - return or(condition).addNestedCondition(condition, consumer); - } - - @Override - public Children nested(boolean condition, Consumer consumer) { - return addNestedCondition(condition, consumer); - } - - @Override - public Children not(boolean condition, Consumer consumer) { - return not(condition).addNestedCondition(condition, consumer); - } - - @Override - public Children or(boolean condition) { - return doIt(condition, OR); - } - - @Override - public Children apply(boolean condition, String applySql, Object... value) { - return doIt(condition, APPLY, () -> formatSql(applySql, value)); - } - - @Override - public Children last(boolean condition, String lastSql) { - if (condition) { - this.lastSql.setStringValue(StringPool.SPACE + lastSql); - } - return typedThis; - } - - @Override - public Children comment(boolean condition, String comment) { - if (condition) { - this.sqlComment.setStringValue(comment); - } - return typedThis; - } - - @Override - public Children first(boolean condition, String firstSql) { - if (condition) { - this.sqlFirst.setStringValue(firstSql); - } - return typedThis; - } - - @Override - public Children exists(boolean condition, String existsSql) { - return doIt(condition, EXISTS, () -> String.format("(%s)", existsSql)); - } - - @Override - public Children notExists(boolean condition, String existsSql) { - return not(condition).exists(condition, existsSql); - } - - @Override - public Children isNull(boolean condition, R column) { - return doIt(condition, () -> columnToString(column), IS_NULL); - } - - @Override - public Children isNotNull(boolean condition, R column) { - return doIt(condition, () -> columnToString(column), IS_NOT_NULL); - } - - @Override - public Children in(boolean condition, R column, Collection coll) { - return doIt(condition, () -> columnToString(column), IN, inExpression(coll)); - } - - @Override - public Children notIn(boolean condition, R column, Collection coll) { - return doIt(condition, () -> columnToString(column), NOT_IN, inExpression(coll)); - } - - @Override - public Children inSql(boolean condition, R column, String inValue) { - return doIt(condition, () -> columnToString(column), IN, () -> String.format("(%s)", inValue)); - } - - @Override - public Children notInSql(boolean condition, R column, String inValue) { - return doIt(condition, () -> columnToString(column), NOT_IN, () -> String.format("(%s)", inValue)); - } - - @Override - public Children groupBy(boolean condition, R... columns) { - if (ArrayUtils.isEmpty(columns)) { - return typedThis; - } - return doIt(condition, GROUP_BY, - () -> columns.length == 1 ? columnToString(columns[0]) : columnsToString(columns)); - } - - @Override - public Children orderBy(boolean condition, boolean isAsc, R... columns) { - if (ArrayUtils.isEmpty(columns)) { - return typedThis; - } - SqlKeyword mode = isAsc ? ASC : DESC; - for (R column : columns) { - doIt(condition, ORDER_BY, () -> columnToString(column), mode); - } - return typedThis; - } - - @Override - public Children having(boolean condition, String sqlHaving, Object... params) { - return doIt(condition, HAVING, () -> formatSqlIfNeed(condition, sqlHaving, params)); - } - - @Override - public Children func(boolean condition, Consumer consumer) { - if (condition) { - consumer.accept(typedThis); - } - return typedThis; - } - - /** - * 内部自用 - *

NOT 关键词

- */ - protected Children not(boolean condition) { - return doIt(condition, NOT); - } - - /** - * 内部自用 - *

拼接 AND

- */ - protected Children and(boolean condition) { - return doIt(condition, AND); - } - - /** - * 内部自用 - *

拼接 LIKE 以及 值

- */ - protected Children likeValue(boolean condition, SqlKeyword keyword, R column, Object val, SqlLike sqlLike) { - return doIt(condition, () -> columnToString(column), keyword, () -> formatSql("{0}", SqlUtils.concatLike(val, sqlLike))); - } - - /** - * 普通查询条件 - * - * @param condition 是否执行 - * @param column 属性 - * @param sqlKeyword SQL 关键词 - * @param val 条件值 - */ - protected Children addCondition(boolean condition, R column, SqlKeyword sqlKeyword, Object val) { - return doIt(condition, () -> columnToString(column), sqlKeyword, () -> formatSql("{0}", val)); - } - - /** - * 多重嵌套查询条件 - * - * @param condition 查询条件值 - */ - protected Children addNestedCondition(boolean condition, Consumer consumer) { - if (condition) { - final Children instance = instance(); - consumer.accept(instance); - return doIt(true, APPLY, instance); - } - return typedThis; - } - - /** - * 子类返回一个自己的新对象 - */ - protected abstract Children instance(); - - /** - * 格式化SQL - * - * @param sqlStr SQL语句部分 - * @param params 参数集 - * @return sql - */ - protected final String formatSql(String sqlStr, Object... params) { - return formatSqlIfNeed(true, sqlStr, params); - } - - /** - *

- * 根据需要格式化SQL
- *
- * Format SQL for methods: EntityQ.where/and/or...("name={0}", value); - * ALL the {i} will be replaced with #{MPGENVALi}
- *
- * ew.where("sample_name={0}", "haha").and("sample_age >{0} - * and sample_age<{1}", 18, 30) TO - * sample_name=#{MPGENVAL1} and sample_age>#{MPGENVAL2} and - * sample_age<#{MPGENVAL3}
- *

- * - * @param need 是否需要格式化 - * @param sqlStr SQL语句部分 - * @param params 参数集 - * @return sql - */ - protected final String formatSqlIfNeed(boolean need, String sqlStr, Object... params) { - if (!need || StringUtils.isBlank(sqlStr)) { - return null; - } - if (ArrayUtils.isNotEmpty(params)) { - for (int i = 0; i < params.length; ++i) { - String genParamName = Constants.WRAPPER_PARAM + paramNameSeq.incrementAndGet(); - sqlStr = sqlStr.replace(String.format("{%s}", i), - String.format(Constants.WRAPPER_PARAM_FORMAT, Constants.WRAPPER, genParamName)); - paramNameValuePairs.put(genParamName, params[i]); - } - } - return sqlStr; - } - - /** - * 获取in表达式 包含括号 - * - * @param value 集合 - */ - private ISqlSegment inExpression(Collection value) { - return () -> value.stream().map(i -> formatSql("{0}", i)) - .collect(joining(StringPool.COMMA, StringPool.LEFT_BRACKET, StringPool.RIGHT_BRACKET)); - } - - /** - * 必要的初始化 - */ - protected void initNeed() { - paramNameSeq = new AtomicInteger(0); - paramNameValuePairs = new HashMap<>(16); - expression = new MergeSegments(); - lastSql = SharedString.emptyString(); - sqlComment = SharedString.emptyString(); - sqlFirst = SharedString.emptyString(); - } - - @Override - public void clear() { - entity = null; - paramNameSeq.set(0); - paramNameValuePairs.clear(); - expression.clear(); - lastSql.toEmpty(); - sqlComment.toEmpty(); - sqlFirst.toEmpty(); - } - - /** - * 对sql片段进行组装 - * - * @param condition 是否执行 - * @param sqlSegments sql片段数组 - * @return children - */ - protected Children doIt(boolean condition, ISqlSegment... sqlSegments) { - if (condition) { - expression.add(sqlSegments); - } - return typedThis; - } - - @Override - public String getSqlSegment() { - return expression.getSqlSegment() + lastSql.getStringValue(); - } - - @Override - public String getSqlComment() { - if (StringUtils.isNotBlank(sqlComment.getStringValue())) { - return "/*" + StringEscape.escapeRawString(sqlComment.getStringValue()) + "*/"; - } - return null; - } - - @Override - public String getSqlFirst() { - if (StringUtils.isNotBlank(sqlFirst.getStringValue())) { - return StringEscape.escapeRawString(sqlFirst.getStringValue()); - } - return null; - } - - @Override - public MergeSegments getExpression() { - return expression; - } - - public Map getParamNameValuePairs() { - return paramNameValuePairs; - } - - /** - * 获取 columnName - */ - protected String columnToString(R column) { - return (String) column; - } - - /** - * 多字段转换为逗号 "," 分割字符串 - * - * @param columns 多字段 - */ - protected String columnsToString(R... columns) { - return Arrays.stream(columns).map(this::columnToString).collect(joining(StringPool.COMMA)); - } - - @Override - @SuppressWarnings("all") - public Children clone() { - return SerializationUtils.clone(typedThis); - } - - @Override - public Children join(String keyWord, boolean condition, String joinSql) { - if (condition) { - from.setStringValue(from.getStringValue() + keyWord + joinSql); - } - return typedThis; - } -} diff --git a/src/main/java/com/github/mybatisplus/query/MyLambdaQueryWrapper.java b/src/main/java/com/github/mybatisplus/query/MyLambdaQueryWrapper.java index 6b6e283..aa2cd32 100644 --- a/src/main/java/com/github/mybatisplus/query/MyLambdaQueryWrapper.java +++ b/src/main/java/com/github/mybatisplus/query/MyLambdaQueryWrapper.java @@ -36,10 +36,15 @@ public class MyLambdaQueryWrapper extends MyAbstractLambdaWrapper extends MyAbstractLambdaWrapper join(String keyWord, boolean condition, String joinSql) { + if (condition) { + from.setStringValue(from.getStringValue() + keyWord + joinSql); + } + return typedThis; + } } diff --git a/src/main/java/com/github/mybatisplus/query/MyQueryWrapper.java b/src/main/java/com/github/mybatisplus/query/MyQueryWrapper.java index ca6f578..8cfdca2 100644 --- a/src/main/java/com/github/mybatisplus/query/MyQueryWrapper.java +++ b/src/main/java/com/github/mybatisplus/query/MyQueryWrapper.java @@ -1,5 +1,6 @@ package com.github.mybatisplus.query; +import com.baomidou.mybatisplus.core.conditions.AbstractWrapper; import com.baomidou.mybatisplus.core.conditions.SharedString; import com.baomidou.mybatisplus.core.conditions.query.Query; import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments; @@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.baomidou.mybatisplus.core.toolkit.ArrayUtils; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.github.mybatisplus.query.interfaces.MyJoin; import com.github.mybatisplus.toolkit.Constant; import java.util.ArrayList; @@ -22,18 +24,24 @@ import java.util.stream.Collectors; * copy {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ @SuppressWarnings("serial") -public class MyQueryWrapper extends MyAbstractWrapper> - implements Query, T, String> { +public class MyQueryWrapper extends AbstractWrapper> + implements Query, T, String>, MyJoin> { /** * 查询字段 */ private SharedString sqlSelect = new SharedString(); + /** + * 连表字段 + */ + private SharedString from = SharedString.emptyString(); + /** * 主表别名 */ - private SharedString alias = new SharedString(Constant.TABLE_ALIAS); + private final SharedString alias = new SharedString(Constant.TABLE_ALIAS); + public MyQueryWrapper() { this(null); @@ -119,7 +127,7 @@ public class MyQueryWrapper extends MyAbstractWrapper lambda() { return new MyLambdaQueryWrapper<>(getEntity(), getEntityClass(), from, sqlSelect, paramNameSeq, paramNameValuePairs, - expression, lastSql, sqlComment, sqlFirst); + expression, lastSql, sqlComment, sqlFirst); } /** @@ -139,4 +147,12 @@ public class MyQueryWrapper extends MyAbstractWrapper join(String keyWord, boolean condition, String joinSql) { + if (condition) { + from.setStringValue(from.getStringValue() + keyWord + joinSql); + } + return typedThis; + } } diff --git a/src/main/java/com/github/mybatisplus/query/interfaces/MyJoin.java b/src/main/java/com/github/mybatisplus/query/interfaces/MyJoin.java index 52127fe..4df3eff 100644 --- a/src/main/java/com/github/mybatisplus/query/interfaces/MyJoin.java +++ b/src/main/java/com/github/mybatisplus/query/interfaces/MyJoin.java @@ -1,11 +1,12 @@ package com.github.mybatisplus.query.interfaces; +import com.github.mybatisplus.interfaces.BaseJoin; import com.github.mybatisplus.toolkit.Constant; /** * @author yulichang */ -public interface MyJoin { +public interface MyJoin extends BaseJoin { default Children leftJoin(String joinSql) { return leftJoin(true, joinSql); diff --git a/src/main/java/com/github/mybatisplus/wrapper/MyAbstractWrapper.java b/src/main/java/com/github/mybatisplus/wrapper/MyAbstractWrapper.java index fe3dbb8..3d1ea5f 100644 --- a/src/main/java/com/github/mybatisplus/wrapper/MyAbstractWrapper.java +++ b/src/main/java/com/github/mybatisplus/wrapper/MyAbstractWrapper.java @@ -31,7 +31,7 @@ import static java.util.stream.Collectors.joining; * copy {@link com.baomidou.mybatisplus.core.conditions.AbstractWrapper} */ @SuppressWarnings({"serial", "unchecked"}) -public abstract class MyAbstractWrapper> extends MyWrapper +public abstract class MyAbstractWrapper> extends Wrapper implements MyCompare, Nested, Join, MyFunc { /** diff --git a/src/main/java/com/github/mybatisplus/wrapper/MyJoinLambdaQueryWrapper.java b/src/main/java/com/github/mybatisplus/wrapper/MyJoinLambdaQueryWrapper.java index 76b17dd..66622d0 100644 --- a/src/main/java/com/github/mybatisplus/wrapper/MyJoinLambdaQueryWrapper.java +++ b/src/main/java/com/github/mybatisplus/wrapper/MyJoinLambdaQueryWrapper.java @@ -37,17 +37,17 @@ public class MyJoinLambdaQueryWrapper extends MyAbstractLambdaWrapper selectColumns = new ArrayList<>(); + private final List selectColumns = new ArrayList<>(); /** diff --git a/src/main/java/com/github/mybatisplus/wrapper/MyWrapper.java b/src/main/java/com/github/mybatisplus/wrapper/MyWrapper.java deleted file mode 100644 index e1ada0d..0000000 --- a/src/main/java/com/github/mybatisplus/wrapper/MyWrapper.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.github.mybatisplus.wrapper; - -import com.baomidou.mybatisplus.core.conditions.ISqlSegment; -import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments; -import com.baomidou.mybatisplus.core.conditions.segments.NormalSegmentList; -import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; -import com.baomidou.mybatisplus.core.metadata.TableInfo; -import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; -import com.baomidou.mybatisplus.core.toolkit.*; - -import java.util.Objects; - -/** - * copy {@link com.baomidou.mybatisplus.core.conditions.Wrapper} - *

- * join wrapper的顶级wrapper - * 与mp的Wrapper没做任何改动 - *

- * 因为单表wrapper与多表wrapper体系不一样,暂时先分开,后续可以统一wrapper - */ -@SuppressWarnings("all") -public abstract class MyWrapper implements ISqlSegment { - - /** - * 实体对象(子类实现) - * - * @return 泛型 T - */ - public abstract T getEntity(); - - public String getSqlSelect() { - return null; - } - - public String getSqlSet() { - return null; - } - - public String getSqlComment() { - return null; - } - - public String getSqlFirst() { - return null; - } - - /** - * 获取 MergeSegments - */ - public abstract MergeSegments getExpression(); - - /** - * 获取自定义SQL 简化自定义XML复杂情况 - *

- * 使用方法: `select xxx from table` + ${ew.customSqlSegment} - *

- * 注意事项: - * 1. 逻辑删除需要自己拼接条件 (之前自定义也同样) - * 2. 不支持wrapper中附带实体的情况 (wrapper自带实体会更麻烦) - * 3. 用法 ${ew.customSqlSegment} (不需要where标签包裹,切记!) - * 4. ew是wrapper定义别名,不能使用其他的替换 - */ - public String getCustomSqlSegment() { - MergeSegments expression = getExpression(); - if (Objects.nonNull(expression)) { - NormalSegmentList normal = expression.getNormal(); - String sqlSegment = getSqlSegment(); - if (StringUtils.isNotBlank(sqlSegment)) { - if (normal.isEmpty()) { - return sqlSegment; - } else { - return Constants.WHERE + StringPool.SPACE + sqlSegment; - } - } - } - return StringPool.EMPTY; - } - - /** - * 查询条件为空(包含entity) - */ - public boolean isEmptyOfWhere() { - return isEmptyOfNormal() && isEmptyOfEntity(); - } - - /** - * 查询条件不为空(包含entity) - */ - public boolean nonEmptyOfWhere() { - return !isEmptyOfWhere(); - } - - /** - * 查询条件为空(不包含entity) - */ - public boolean isEmptyOfNormal() { - return CollectionUtils.isEmpty(getExpression().getNormal()); - } - - /** - * 查询条件为空(不包含entity) - */ - public boolean nonEmptyOfNormal() { - return !isEmptyOfNormal(); - } - - /** - * 深层实体判断属性 - * - * @return true 不为空 - */ - public boolean nonEmptyOfEntity() { - T entity = getEntity(); - if (entity == null) { - return false; - } - TableInfo tableInfo = TableInfoHelper.getTableInfo(entity.getClass()); - if (tableInfo == null) { - return false; - } - if (tableInfo.getFieldList().stream().anyMatch(e -> fieldStrategyMatch(entity, e))) { - return true; - } - return StringUtils.isNotBlank(tableInfo.getKeyProperty()) ? Objects.nonNull(ReflectionKit.getFieldValue(entity, tableInfo.getKeyProperty())) : false; - } - - /** - * 根据实体FieldStrategy属性来决定判断逻辑 - */ - private boolean fieldStrategyMatch(T entity, TableFieldInfo e) { - switch (e.getWhereStrategy()) { - case NOT_NULL: - return Objects.nonNull(ReflectionKit.getFieldValue(entity, e.getProperty())); - case IGNORED: - return true; - case NOT_EMPTY: - return StringUtils.checkValNotNull(ReflectionKit.getFieldValue(entity, e.getProperty())); - case NEVER: - return false; - default: - return Objects.nonNull(ReflectionKit.getFieldValue(entity, e.getProperty())); - } - } - - /** - * 深层实体判断属性 - * - * @return true 为空 - */ - public boolean isEmptyOfEntity() { - return !nonEmptyOfEntity(); - } - - /** - * 获取格式化后的执行sql - * - * @return sql - * @since 3.3.1 - */ - public String getTargetSql() { - return getSqlSegment().replaceAll("#\\{.+?}", "?"); - } - - /** - * 条件清空 - * - * @since 3.3.1 - */ - abstract public void clear(); -} diff --git a/src/main/java/com/github/mybatisplus/wrapper/interfaces/MyLambdaJoin.java b/src/main/java/com/github/mybatisplus/wrapper/interfaces/MyLambdaJoin.java index 94cc1aa..8c5d267 100644 --- a/src/main/java/com/github/mybatisplus/wrapper/interfaces/MyLambdaJoin.java +++ b/src/main/java/com/github/mybatisplus/wrapper/interfaces/MyLambdaJoin.java @@ -1,12 +1,13 @@ package com.github.mybatisplus.wrapper.interfaces; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import com.github.mybatisplus.interfaces.BaseJoin; import com.github.mybatisplus.toolkit.Constant; /** * @author yulichang */ -public interface MyLambdaJoin { +public interface MyLambdaJoin extends BaseJoin { default Children leftJoin(Class clazz, SFunction left, SFunction right) { return leftJoin(true, clazz, left, right);