From 1fe9ffb80c5a1032e06ed3d3cd772c77726ea014 Mon Sep 17 00:00:00 2001 From: admin <570810310@qq.com> Date: Tue, 2 Feb 2021 11:17:07 +0800 Subject: [PATCH] update --- .../interceptor/MyResultInterceptor.java | 37 ++++++++++------- ...mbda.java => MyAbstractLambdaWrapper.java} | 2 +- .../mybatisplus/query/MyAbstractWrapper.java | 11 ++++- ...daQuery.java => MyLambdaQueryWrapper.java} | 40 ++++++++----------- .../{MyQuery.java => MyQueryWrapper.java} | 30 +++++++------- ...per.java => MyJoinLambdaQueryWrapper.java} | 36 +++++++++-------- 6 files changed, 83 insertions(+), 73 deletions(-) rename src/main/java/com/github/mybatisplus/query/{MyAbstractLambda.java => MyAbstractLambdaWrapper.java} (97%) rename src/main/java/com/github/mybatisplus/query/{MyLambdaQuery.java => MyLambdaQueryWrapper.java} (81%) rename src/main/java/com/github/mybatisplus/query/{MyQuery.java => MyQueryWrapper.java} (70%) rename src/main/java/com/github/mybatisplus/wrapper/{MyLambdaQueryWrapper.java => MyJoinLambdaQueryWrapper.java} (82%) diff --git a/src/main/java/com/github/mybatisplus/interceptor/MyResultInterceptor.java b/src/main/java/com/github/mybatisplus/interceptor/MyResultInterceptor.java index b910368..a42d855 100644 --- a/src/main/java/com/github/mybatisplus/interceptor/MyResultInterceptor.java +++ b/src/main/java/com/github/mybatisplus/interceptor/MyResultInterceptor.java @@ -24,6 +24,16 @@ import java.util.Objects; @Intercepts({@Signature(type = ResultSetHandler.class, method = "handleResultSets", args = {Statement.class})}) public class MyResultInterceptor implements Interceptor { + private static Field parameterHandler = null; + + static { + try { + parameterHandler = DefaultResultSetHandler.class.getDeclaredField("parameterHandler"); + parameterHandler.setAccessible(true); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } + } @Override public Object intercept(Invocation invocation) throws Throwable { @@ -66,23 +76,20 @@ public class MyResultInterceptor implements Interceptor { * @see MybatisParameterHandler */ public static Class getFieldVal(DefaultResultSetHandler handler) { - Field[] fieldList = handler.getClass().getDeclaredFields(); - for (Field f : fieldList) { - if (f.getName().equals("parameterHandler")) { - f.setAccessible(true); - try { - MybatisParameterHandler mybatisParameterHandler = (MybatisParameterHandler) f.get(handler); - Object object = mybatisParameterHandler.getParameterObject(); - if (object instanceof Map) { - Map args = (Map) object; - return (Class) args.get(Constant.CLAZZ); - } - } catch (Exception e) { - return null; - } + try { + MybatisParameterHandler mybatisParameterHandler = (MybatisParameterHandler) parameterHandler.get(handler); + Object object = mybatisParameterHandler.getParameterObject(); + if (Objects.isNull(object)) { + return null; } + if (object instanceof Map) { + Map args = (Map) object; + return (Class) args.get(Constant.CLAZZ); + } + return null; + } catch (IllegalAccessException e) { + return null; } - return null; } @Override diff --git a/src/main/java/com/github/mybatisplus/query/MyAbstractLambda.java b/src/main/java/com/github/mybatisplus/query/MyAbstractLambdaWrapper.java similarity index 97% rename from src/main/java/com/github/mybatisplus/query/MyAbstractLambda.java rename to src/main/java/com/github/mybatisplus/query/MyAbstractLambdaWrapper.java index a9ccf50..8ce6ed2 100644 --- a/src/main/java/com/github/mybatisplus/query/MyAbstractLambda.java +++ b/src/main/java/com/github/mybatisplus/query/MyAbstractLambdaWrapper.java @@ -18,7 +18,7 @@ import static java.util.stream.Collectors.joining; * copy {@link com.baomidou.mybatisplus.core.conditions.AbstractLambdaWrapper} */ @SuppressWarnings("serial") -public abstract class MyAbstractLambda> +public abstract class MyAbstractLambdaWrapper> extends MyAbstractWrapper, Children> { private Map columnMap = null; diff --git a/src/main/java/com/github/mybatisplus/query/MyAbstractWrapper.java b/src/main/java/com/github/mybatisplus/query/MyAbstractWrapper.java index e01e329..8637d42 100644 --- a/src/main/java/com/github/mybatisplus/query/MyAbstractWrapper.java +++ b/src/main/java/com/github/mybatisplus/query/MyAbstractWrapper.java @@ -35,7 +35,8 @@ import static java.util.stream.Collectors.joining; */ @SuppressWarnings({"serial", "unchecked"}) public abstract class MyAbstractWrapper> extends MyWrapper - implements Compare, Nested, Join, Func { + implements Compare, Nested, Join, Func, + MyJoin { /** * 占位符 @@ -516,4 +517,12 @@ public abstract class MyAbstractWrapper extends MyAbstractLambda> - implements Query, T, SFunction>, MyJoin> { +public class MyLambdaQueryWrapper extends MyAbstractLambdaWrapper> + implements Query, T, SFunction>, MyJoin> { /** * 查询字段 @@ -45,14 +45,14 @@ public class MyLambdaQuery extends MyAbstractLambda> /** * 不建议直接 new 该实例,使用 Wrappers.lambdaQuery(entity) */ - public MyLambdaQuery() { + public MyLambdaQueryWrapper() { this((T) null); } /** * 不建议直接 new 该实例,使用 Wrappers.lambdaQuery(entity) */ - public MyLambdaQuery(T entity) { + public MyLambdaQueryWrapper(T entity) { super.setEntity(entity); super.initNeed(); } @@ -60,7 +60,7 @@ public class MyLambdaQuery extends MyAbstractLambda> /** * 不建议直接 new 该实例,使用 Wrappers.lambdaQuery(entity) */ - public MyLambdaQuery(Class entityClass) { + public MyLambdaQueryWrapper(Class entityClass) { super.setEntityClass(entityClass); super.initNeed(); } @@ -68,9 +68,9 @@ public class MyLambdaQuery extends MyAbstractLambda> /** * 不建议直接 new 该实例,使用 Wrappers.lambdaQuery(...) */ - MyLambdaQuery(T entity, Class entityClass, SharedString from, SharedString sqlSelect, AtomicInteger paramNameSeq, - Map paramNameValuePairs, MergeSegments mergeSegments, - SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) { + MyLambdaQueryWrapper(T entity, Class entityClass, SharedString from, SharedString sqlSelect, AtomicInteger paramNameSeq, + Map paramNameValuePairs, MergeSegments mergeSegments, + SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) { super.setEntity(entity); super.setEntityClass(entityClass); this.paramNameSeq = paramNameSeq; @@ -90,7 +90,7 @@ public class MyLambdaQuery extends MyAbstractLambda> */ @SafeVarargs @Override - public final MyLambdaQuery select(SFunction... columns) { + public final MyLambdaQueryWrapper select(SFunction... columns) { if (ArrayUtils.isNotEmpty(columns)) { String s = columnsToString(false, columns); if (StringUtils.isBlank(sqlSelect.getStringValue())) { @@ -103,7 +103,7 @@ public class MyLambdaQuery extends MyAbstractLambda> } @SafeVarargs - public final MyLambdaQuery select(String... columns) { + public final MyLambdaQueryWrapper select(String... columns) { if (ArrayUtils.isNotEmpty(columns)) { String s = String.join(StringPool.COMMA, columns); if (StringUtils.isBlank(sqlSelect.getStringValue())) { @@ -127,7 +127,7 @@ public class MyLambdaQuery extends MyAbstractLambda> * @return this */ @Override - public MyLambdaQuery select(Class entityClass, Predicate predicate) { + public MyLambdaQueryWrapper select(Class entityClass, Predicate predicate) { if (entityClass == null) { entityClass = getEntityClass(); } else { @@ -145,7 +145,7 @@ public class MyLambdaQuery extends MyAbstractLambda> return typedThis; } - public final MyLambdaQuery selectAll(Class clazz) { + public final MyLambdaQueryWrapper selectAll(Class clazz) { TableInfo info = TableInfoHelper.getTableInfo(clazz); List list = new ArrayList<>(); list.add(Constant.TABLE_ALIAS + StringPool.DOT + info.getKeyColumn()); @@ -162,8 +162,8 @@ public class MyLambdaQuery extends MyAbstractLambda> /** * 返回一个支持 lambda 函数写法的 wrapper */ - public MyQuery stringQuery() { - return new MyQuery<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs, + public MyQueryWrapper stringQuery() { + return new MyQueryWrapper<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs, expression, sqlSelect, from, lastSql, sqlComment, sqlFirst); } @@ -186,8 +186,8 @@ public class MyLambdaQuery extends MyAbstractLambda> *

故 sqlSelect from不向下传递

*/ @Override - protected MyLambdaQuery instance() { - return new MyLambdaQuery<>(getEntity(), getEntityClass(), null, null, paramNameSeq, paramNameValuePairs, + protected MyLambdaQueryWrapper instance() { + return new MyLambdaQueryWrapper<>(getEntity(), getEntityClass(), null, null, paramNameSeq, paramNameValuePairs, new MergeSegments(), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString()); } @@ -197,12 +197,4 @@ public class MyLambdaQuery extends MyAbstractLambda> sqlSelect.toNull(); } - @Override - public MyLambdaQuery 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/MyQuery.java b/src/main/java/com/github/mybatisplus/query/MyQueryWrapper.java similarity index 70% rename from src/main/java/com/github/mybatisplus/query/MyQuery.java rename to src/main/java/com/github/mybatisplus/query/MyQueryWrapper.java index 93ecf2a..6f8beb3 100644 --- a/src/main/java/com/github/mybatisplus/query/MyQuery.java +++ b/src/main/java/com/github/mybatisplus/query/MyQueryWrapper.java @@ -17,8 +17,8 @@ import java.util.function.Predicate; * copy {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ @SuppressWarnings("serial") -public class MyQuery extends MyAbstractWrapper> - implements Query, T, String> { +public class MyQueryWrapper extends MyAbstractWrapper> + implements Query, T, String> { /** * 查询字段 @@ -30,16 +30,16 @@ public class MyQuery extends MyAbstractWrapper> */ private SharedString alias = new SharedString(Constant.TABLE_ALIAS); - public MyQuery() { + public MyQueryWrapper() { this(null); } - public MyQuery(T entity) { + public MyQueryWrapper(T entity) { super.setEntity(entity); super.initNeed(); } - public MyQuery(T entity, String... columns) { + public MyQueryWrapper(T entity, String... columns) { super.setEntity(entity); super.initNeed(); this.select(columns); @@ -50,9 +50,9 @@ public class MyQuery extends MyAbstractWrapper> * * @param entityClass 本不应该需要的 */ - public MyQuery(T entity, Class entityClass, AtomicInteger paramNameSeq, - Map paramNameValuePairs, MergeSegments mergeSegments, - SharedString sqlSelect, SharedString from, SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) { + public MyQueryWrapper(T entity, Class entityClass, AtomicInteger paramNameSeq, + Map paramNameValuePairs, MergeSegments mergeSegments, + SharedString sqlSelect, SharedString from, SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) { super.setEntity(entity); super.setEntityClass(entityClass); this.paramNameSeq = paramNameSeq; @@ -66,7 +66,7 @@ public class MyQuery extends MyAbstractWrapper> } @Override - public MyQuery select(String... columns) { + public MyQueryWrapper select(String... columns) { if (ArrayUtils.isNotEmpty(columns)) { this.sqlSelect.setStringValue(String.join(StringPool.COMMA, columns)); } @@ -74,7 +74,7 @@ public class MyQuery extends MyAbstractWrapper> } @Override - public MyQuery select(Class entityClass, Predicate predicate) { + public MyQueryWrapper select(Class entityClass, Predicate predicate) { super.setEntityClass(entityClass); this.sqlSelect.setStringValue(TableInfoHelper.getTableInfo(getEntityClass()).chooseSelect(predicate)); return typedThis; @@ -97,9 +97,9 @@ public class MyQuery extends MyAbstractWrapper> /** * 返回一个支持 lambda 函数写法的 wrapper */ - public MyLambdaQuery lambda() { - return new MyLambdaQuery<>(getEntity(), getEntityClass(), null, null, paramNameSeq, paramNameValuePairs, - expression, lastSql, sqlComment, sqlFirst); + public MyLambdaQueryWrapper lambda() { + return new MyLambdaQueryWrapper<>(getEntity(), getEntityClass(), from, sqlSelect, paramNameSeq, paramNameValuePairs, + expression, lastSql, sqlComment, sqlFirst); } /** @@ -109,8 +109,8 @@ public class MyQuery extends MyAbstractWrapper> *

*/ @Override - protected MyQuery instance() { - return new MyQuery<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs, new MergeSegments(), + protected MyQueryWrapper instance() { + return new MyQueryWrapper<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs, new MergeSegments(), null, null, SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString()); } diff --git a/src/main/java/com/github/mybatisplus/wrapper/MyLambdaQueryWrapper.java b/src/main/java/com/github/mybatisplus/wrapper/MyJoinLambdaQueryWrapper.java similarity index 82% rename from src/main/java/com/github/mybatisplus/wrapper/MyLambdaQueryWrapper.java rename to src/main/java/com/github/mybatisplus/wrapper/MyJoinLambdaQueryWrapper.java index 5092634..76b17dd 100644 --- a/src/main/java/com/github/mybatisplus/wrapper/MyLambdaQueryWrapper.java +++ b/src/main/java/com/github/mybatisplus/wrapper/MyJoinLambdaQueryWrapper.java @@ -26,11 +26,11 @@ import java.util.stream.Collectors; * copy {@link com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper} */ @SuppressWarnings("serial") -public class MyLambdaQueryWrapper extends MyAbstractLambdaWrapper> - implements MySFunctionQuery>, MyLambdaJoin> { +public class MyJoinLambdaQueryWrapper extends MyAbstractLambdaWrapper> + implements MySFunctionQuery>, MyLambdaJoin> { /** - * 查询字段 + * 查询字段 sql */ private SharedString sqlSelect = new SharedString(); @@ -44,21 +44,23 @@ public class MyLambdaQueryWrapper extends MyAbstractLambdaWrapper selectColumns = new ArrayList<>(); /** * 不建议直接 new 该实例,使用 Wrappers.lambdaQuery(entity) */ - public MyLambdaQueryWrapper() { + public MyJoinLambdaQueryWrapper() { this((T) null); } /** * 不建议直接 new 该实例,使用 Wrappers.lambdaQuery(entity) */ - public MyLambdaQueryWrapper(T entity) { + public MyJoinLambdaQueryWrapper(T entity) { super.setEntity(entity); super.initNeed(); } @@ -66,7 +68,7 @@ public class MyLambdaQueryWrapper extends MyAbstractLambdaWrapper entityClass) { + public MyJoinLambdaQueryWrapper(Class entityClass) { super.setEntityClass(entityClass); super.initNeed(); } @@ -74,9 +76,9 @@ public class MyLambdaQueryWrapper extends MyAbstractLambdaWrapper entityClass, SharedString sqlSelect, AtomicInteger paramNameSeq, - Map paramNameValuePairs, MergeSegments mergeSegments, - SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) { + MyJoinLambdaQueryWrapper(T entity, Class entityClass, SharedString sqlSelect, AtomicInteger paramNameSeq, + Map paramNameValuePairs, MergeSegments mergeSegments, + SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) { super.setEntity(entity); super.setEntityClass(entityClass); this.paramNameSeq = paramNameSeq; @@ -94,7 +96,7 @@ public class MyLambdaQueryWrapper extends MyAbstractLambdaWrapper MyLambdaQueryWrapper select(SFunction... columns) { + public final MyJoinLambdaQueryWrapper select(SFunction... columns) { if (ArrayUtils.isNotEmpty(columns)) { for (SFunction s : columns) { Class clazz = MyLambdaUtils.getEntityClass(s); @@ -106,7 +108,7 @@ public class MyLambdaQueryWrapper extends MyAbstractLambdaWrapper MyLambdaQueryWrapper select(Class entityClass, Predicate predicate) { + public MyJoinLambdaQueryWrapper select(Class entityClass, Predicate predicate) { TableInfo info = TableInfoHelper.getTableInfo(entityClass); Assert.notNull(info, "table can not be find"); info.getFieldList().stream().filter(predicate).collect(Collectors.toList()).forEach( @@ -115,7 +117,7 @@ public class MyLambdaQueryWrapper extends MyAbstractLambdaWrapper MyLambdaQueryWrapper selectAs(SFunction columns, SFunction alias) { + public final MyJoinLambdaQueryWrapper selectAs(SFunction columns, SFunction alias) { Class clazz = MyLambdaUtils.getEntityClass(columns); TableInfo info = TableInfoHelper.getTableInfo(clazz); Assert.notNull(info, "table can not be find for lambda"); @@ -123,7 +125,7 @@ public class MyLambdaQueryWrapper extends MyAbstractLambdaWrapper selectAll(Class clazz) { + public final MyJoinLambdaQueryWrapper selectAll(Class clazz) { TableInfo info = TableInfoHelper.getTableInfo(clazz); Assert.notNull(info, "table can not be find -> %s", clazz); selectColumns.add(new SelectColumn(clazz, info.getTableName(), info.getKeyColumn(), null)); @@ -158,8 +160,8 @@ public class MyLambdaQueryWrapper extends MyAbstractLambdaWrapper故 sqlSelect 不向下传递

*/ @Override - protected MyLambdaQueryWrapper instance() { - return new MyLambdaQueryWrapper<>(getEntity(), getEntityClass(), null, paramNameSeq, paramNameValuePairs, + protected MyJoinLambdaQueryWrapper instance() { + return new MyJoinLambdaQueryWrapper<>(getEntity(), getEntityClass(), null, paramNameSeq, paramNameValuePairs, new MergeSegments(), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString()); } @@ -170,7 +172,7 @@ public class MyLambdaQueryWrapper extends MyAbstractLambdaWrapper MyLambdaQueryWrapper join(String keyWord, boolean condition, Class clazz, SFunction left, SFunction right) { + public MyJoinLambdaQueryWrapper join(String keyWord, boolean condition, Class clazz, SFunction left, SFunction right) { if (condition) { TableInfo leftInfo = TableInfoHelper.getTableInfo(clazz); TableInfo rightInfo = TableInfoHelper.getTableInfo(MyLambdaUtils.getEntityClass(right));