From 7c6173d3d2dd37e172072036621d2b4492c93fe7 Mon Sep 17 00:00:00 2001 From: yulichang <570810310@qq.com> Date: Tue, 4 Apr 2023 16:13:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BC=82=E5=B8=B8=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yulichang/mapper/MPJTableFieldInfo.java | 2 +- .../yulichang/toolkit/SpringContentUtils.java | 9 +++-- .../yulichang/wrapper/interfaces/Chain.java | 36 +++++++++---------- .../yulichang/wrapper/interfaces/Query.java | 30 ++++++++++++---- .../wrapper/segments/SelectCache.java | 29 +++++++++++++++ .../test/join/LambdaWrapperTest.java | 2 +- 6 files changed, 80 insertions(+), 28 deletions(-) diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/mapper/MPJTableFieldInfo.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/mapper/MPJTableFieldInfo.java index 433c32e..ec8acf7 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/mapper/MPJTableFieldInfo.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/mapper/MPJTableFieldInfo.java @@ -280,7 +280,7 @@ public class MPJTableFieldInfo { if (joinTableInfo == null) { throw new MPJException("未注册 mapper " + this.joinClass.getName()); } - this.joinMapper = (BaseMapper) SpringContentUtils.getBean(joinTableInfo.getMapperClass()); + this.joinMapper = SpringContentUtils.getMapper(joinTableInfo.getEntityClass()); } return this.joinMapper; } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/SpringContentUtils.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/SpringContentUtils.java index 86e3a02..0a58de1 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/SpringContentUtils.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/SpringContentUtils.java @@ -1,6 +1,7 @@ package com.github.yulichang.toolkit; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.toolkit.Assert; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import com.github.yulichang.mapper.MPJTableMapperHelper; @@ -31,11 +32,15 @@ public class SpringContentUtils { if (Objects.isNull(springContext)) { SqlSession session = SqlHelper.sqlSession(clazz); Assert.notNull(session, "mapper not find by class <%s>", clazz.getSimpleName()); - return (T) SqlHelper.getMapper(clazz, session); + BaseMapper mapper = SqlHelper.getMapper(clazz, session); + Assert.notNull(mapper, "mapper not find by class <%s>", clazz.getSimpleName()); + return (T) mapper; } Class mapper = MPJTableMapperHelper.getMapper(clazz); Assert.notNull(mapper, "mapper not find by class <%s>", clazz.getSimpleName()); - return (T)getBean(mapper); + Object bean = getBean(mapper); + Assert.notNull(bean, "mapper not find by class <%s>", clazz.getSimpleName()); + return (T) bean; } public interface SpringContext { diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Chain.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Chain.java index 7b312a6..7bf9c14 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Chain.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Chain.java @@ -13,8 +13,8 @@ import java.util.List; * 构造方法必须传 class 或 entity 否则会报错 * new MPJLambdaWrapper(User.class) * new MPJQueryWrapper(User.class) - * MPJWrappers.\lambdaJoin(User.class) - * MPJWrappers.\queryJoin(User.class) + * JoinWrappers.\lambdaJoin(User.class) + * JoinWrappers.\queryJoin(User.class) * * @author yulichang * @since 1.4.4 @@ -30,8 +30,8 @@ public interface Chain { * 构造方法必须传 class 或 entity 否则会报错 * new MPJLambdaWrapper(User.class) * new MPJQueryWrapper(User.class) - * MPJWrappers.\lambdaJoin(User.class) - * MPJWrappers.\queryJoin(User.class) + * JoinWrappers.\lambdaJoin(User.class) + * JoinWrappers.\queryJoin(User.class) */ default T one() { return SqlHelper.exec(getEntityClass(), mapper -> mapper.selectOne((Wrapper) this)); @@ -43,8 +43,8 @@ public interface Chain { * 构造方法必须传 class 或 entity 否则会报错 * new MPJLambdaWrapper(User.class) * new MPJQueryWrapper(User.class) - * MPJWrappers.\lambdaJoin(User.class) - * MPJWrappers.\queryJoin(User.class) + * JoinWrappers.\lambdaJoin(User.class) + * JoinWrappers.\queryJoin(User.class) */ default R one(Class resultType) { return SqlHelper.execJoin(getEntityClass(), mapper -> mapper.selectJoinOne(resultType, (MPJBaseJoin) this)); @@ -56,8 +56,8 @@ public interface Chain { * 构造方法必须传 class 或 entity 否则会报错 * new MPJLambdaWrapper(User.class) * new MPJQueryWrapper(User.class) - * MPJWrappers.\lambdaJoin(User.class) - * MPJWrappers.\queryJoin(User.class) + * JoinWrappers.\lambdaJoin(User.class) + * JoinWrappers.\queryJoin(User.class) */ default T first() { List list = list(); @@ -70,8 +70,8 @@ public interface Chain { * 构造方法必须传 class 或 entity 否则会报错 * new MPJLambdaWrapper(User.class) * new MPJQueryWrapper(User.class) - * MPJWrappers.\lambdaJoin(User.class) - * MPJWrappers.\queryJoin(User.class) + * JoinWrappers.\lambdaJoin(User.class) + * JoinWrappers.\queryJoin(User.class) */ default R first(Class resultType) { List list = list(resultType); @@ -83,8 +83,8 @@ public interface Chain { * 构造方法必须传 class 或 entity 否则会报错 * new MPJLambdaWrapper(User.class) * new MPJQueryWrapper(User.class) - * MPJWrappers.\lambdaJoin(User.class) - * MPJWrappers.\queryJoin(User.class) + * JoinWrappers.\lambdaJoin(User.class) + * JoinWrappers.\queryJoin(User.class) */ default List list() { return SqlHelper.exec(getEntityClass(), mapper -> mapper.selectList((Wrapper) this)); @@ -95,8 +95,8 @@ public interface Chain { * 构造方法必须传 class 或 entity 否则会报错 * new MPJLambdaWrapper(User.class) * new MPJQueryWrapper(User.class) - * MPJWrappers.\lambdaJoin(User.class) - * MPJWrappers.\queryJoin(User.class) + * JoinWrappers.\lambdaJoin(User.class) + * JoinWrappers.\queryJoin(User.class) */ default List list(Class resultType) { return SqlHelper.execJoin(getEntityClass(), mapper -> mapper.selectJoinList(resultType, (MPJBaseJoin) this)); @@ -107,8 +107,8 @@ public interface Chain { * 构造方法必须传 class 或 entity 否则会报错 * new MPJLambdaWrapper(User.class) * new MPJQueryWrapper(User.class) - * MPJWrappers.\lambdaJoin(User.class) - * MPJWrappers.\queryJoin(User.class) + * JoinWrappers.\lambdaJoin(User.class) + * JoinWrappers.\queryJoin(User.class) */ default

> P page(P page) { return SqlHelper.exec(getEntityClass(), mapper -> mapper.selectPage(page, (Wrapper) this)); @@ -119,8 +119,8 @@ public interface Chain { * 构造方法必须传 class 或 entity 否则会报错 * new MPJLambdaWrapper(User.class) * new MPJQueryWrapper(User.class) - * MPJWrappers.\lambdaJoin(User.class) - * MPJWrappers.\queryJoin(User.class) + * JoinWrappers.\lambdaJoin(User.class) + * JoinWrappers.\queryJoin(User.class) */ default > P page(P page, Class resultType) { return SqlHelper.execJoin(getEntityClass(), mapper -> mapper.selectJoinPage(page, resultType, (MPJBaseJoin) this)); diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Query.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Query.java index 76e7de3..d393a14 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Query.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Query.java @@ -44,6 +44,24 @@ public interface Query extends Serializable { /** * 过滤查询的字段信息(主键除外!) + * 推荐使用 selectFilter(Class, Predicate) 含主键 + * + * @param predicate 过滤方式 + * @return children + * @see Query#selectFilter(Class, Predicate) + */ + @Deprecated + default Children select(Class entityClass, Predicate predicate) { + TableInfo info = TableHelper.get(entityClass); + Asserts.hasTable(info, entityClass); + Map cacheMap = ColumnCache.getMapField(entityClass); + info.getFieldList().stream().filter(predicate).collect(Collectors.toList()).forEach( + i -> getSelectColum().add(new SelectNormal(cacheMap.get(i.getProperty()), getIndex(), isHasAlias(), getAlias()))); + return getChildren(); + } + + /** + * 过滤查询的字段信息 *

例1: 只要 java 字段名以 "test" 开头的 -> select(i -> i.getProperty().startsWith("test"))

*

例2: 只要 java 字段属性是 CharSequence 类型的 -> select(TableFieldInfo::isCharSequence)

*

例3: 只要 java 字段没有填充策略的 -> select(i -> i.getFieldFill() == FieldFill.DEFAULT)

@@ -53,12 +71,12 @@ public interface Query extends Serializable { * @param predicate 过滤方式 * @return children */ - default Children select(Class entityClass, Predicate predicate) { + default Children selectFilter(Class entityClass, Predicate predicate) { TableInfo info = TableHelper.get(entityClass); Asserts.hasTable(info, entityClass); - Map cacheMap = ColumnCache.getMapField(entityClass); - info.getFieldList().stream().filter(predicate).collect(Collectors.toList()).forEach( - i -> getSelectColum().add(new SelectNormal(cacheMap.get(i.getProperty()), getIndex(), isHasAlias(), getAlias()))); + List cacheList = ColumnCache.getListField(entityClass); + cacheList.stream().filter(predicate).collect(Collectors.toList()).forEach( + i -> getSelectColum().add(new SelectNormal(i, getIndex(), isHasAlias(), getAlias()))); return getChildren(); } @@ -81,7 +99,7 @@ public interface Query extends Serializable { * * @param column 列 */ - default Children select(String column, SFunction alias) { + default Children selectAs(String column, SFunction alias) { getSelectColum().add(new SelectString(column + Constants.AS + LambdaUtils.getName(alias), isHasAlias(), getAlias())); return getChildren(); } @@ -91,7 +109,7 @@ public interface Query extends Serializable { * * @param column 列 */ - default Children select(String index, SFunction column, SFunction alias) { + default Children selectAs(String index, SFunction column, SFunction alias) { Map cacheMap = ColumnCache.getMapField(LambdaUtils.getEntityClass(column)); SelectCache cache = cacheMap.get(LambdaUtils.getName(column)); getSelectColum().add(new SelectString( diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectCache.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectCache.java index 7e541f4..9a8da43 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectCache.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectCache.java @@ -23,22 +23,51 @@ import java.util.Objects; @Getter public class SelectCache { + /** + * 实体类 + */ private final Class clazz; + /** + * 是否是主键 + */ private final boolean isPk; + /** + * 查询字段 + */ private final String column; + /** + * 字段类型 + */ private final Class columnType; + /** + * 查询字段 去除特殊符号 比如反引号,单引号,双引号等 + * + * @see StringUtils#getTargetColumn(String) + */ private final String tagColumn; + /** + * 字段属性名 + */ private final String columProperty; + /** + * mp 字段信息 + */ private final TableFieldInfo tableFieldInfo; + /** + * 使用使用 hasTypeHandle + */ private final boolean hasTypeHandle; + /** + * hasTypeHandle 类型 + */ private final TypeHandler typeHandler; public SelectCache(Class clazz, boolean isPk, String column, Class columnType, String columProperty, TableFieldInfo tableFieldInfo) { diff --git a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java index c08f8f0..090994e 100644 --- a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java +++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java @@ -637,7 +637,7 @@ class LambdaWrapperTest { void test6() { MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .selectAll(UserDO.class) - .select(AddressDO.class, p -> true) + .selectFilter(AddressDO.class, p -> true) .leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId) .eq(UserDO::getId, 1); IPage page = userMapper.selectJoinPage(new Page<>(1, 10), UserDTO.class, wrapper);