优化异常提示

This commit is contained in:
yulichang 2023-04-04 16:13:23 +08:00
parent a74c07f059
commit 7c6173d3d2
6 changed files with 80 additions and 28 deletions

View File

@ -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;
}

View File

@ -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 {

View File

@ -13,8 +13,8 @@ import java.util.List;
* 构造方法必须传 class entity 否则会报错
* new MPJLambdaWrapper(User.class)
* new MPJQueryWrapper(User.class)
* MPJWrappers.\<User\>lambdaJoin(User.class)
* MPJWrappers.\<User\>queryJoin(User.class)
* JoinWrappers.\<User\>lambdaJoin(User.class)
* JoinWrappers.\<User\>queryJoin(User.class)
*
* @author yulichang
* @since 1.4.4
@ -30,8 +30,8 @@ public interface Chain<T> {
* 构造方法必须传 class entity 否则会报错
* new MPJLambdaWrapper(User.class)
* new MPJQueryWrapper(User.class)
* MPJWrappers.\<User\>lambdaJoin(User.class)
* MPJWrappers.\<User\>queryJoin(User.class)
* JoinWrappers.\<User\>lambdaJoin(User.class)
* JoinWrappers.\<User\>queryJoin(User.class)
*/
default T one() {
return SqlHelper.exec(getEntityClass(), mapper -> mapper.selectOne((Wrapper<T>) this));
@ -43,8 +43,8 @@ public interface Chain<T> {
* 构造方法必须传 class entity 否则会报错
* new MPJLambdaWrapper(User.class)
* new MPJQueryWrapper(User.class)
* MPJWrappers.\<User\>lambdaJoin(User.class)
* MPJWrappers.\<User\>queryJoin(User.class)
* JoinWrappers.\<User\>lambdaJoin(User.class)
* JoinWrappers.\<User\>queryJoin(User.class)
*/
default <R> R one(Class<R> resultType) {
return SqlHelper.execJoin(getEntityClass(), mapper -> mapper.selectJoinOne(resultType, (MPJBaseJoin<T>) this));
@ -56,8 +56,8 @@ public interface Chain<T> {
* 构造方法必须传 class entity 否则会报错
* new MPJLambdaWrapper(User.class)
* new MPJQueryWrapper(User.class)
* MPJWrappers.\<User\>lambdaJoin(User.class)
* MPJWrappers.\<User\>queryJoin(User.class)
* JoinWrappers.\<User\>lambdaJoin(User.class)
* JoinWrappers.\<User\>queryJoin(User.class)
*/
default T first() {
List<T> list = list();
@ -70,8 +70,8 @@ public interface Chain<T> {
* 构造方法必须传 class entity 否则会报错
* new MPJLambdaWrapper(User.class)
* new MPJQueryWrapper(User.class)
* MPJWrappers.\<User\>lambdaJoin(User.class)
* MPJWrappers.\<User\>queryJoin(User.class)
* JoinWrappers.\<User\>lambdaJoin(User.class)
* JoinWrappers.\<User\>queryJoin(User.class)
*/
default <R> R first(Class<R> resultType) {
List<R> list = list(resultType);
@ -83,8 +83,8 @@ public interface Chain<T> {
* 构造方法必须传 class entity 否则会报错
* new MPJLambdaWrapper(User.class)
* new MPJQueryWrapper(User.class)
* MPJWrappers.\<User\>lambdaJoin(User.class)
* MPJWrappers.\<User\>queryJoin(User.class)
* JoinWrappers.\<User\>lambdaJoin(User.class)
* JoinWrappers.\<User\>queryJoin(User.class)
*/
default List<T> list() {
return SqlHelper.exec(getEntityClass(), mapper -> mapper.selectList((Wrapper<T>) this));
@ -95,8 +95,8 @@ public interface Chain<T> {
* 构造方法必须传 class entity 否则会报错
* new MPJLambdaWrapper(User.class)
* new MPJQueryWrapper(User.class)
* MPJWrappers.\<User\>lambdaJoin(User.class)
* MPJWrappers.\<User\>queryJoin(User.class)
* JoinWrappers.\<User\>lambdaJoin(User.class)
* JoinWrappers.\<User\>queryJoin(User.class)
*/
default <R> List<R> list(Class<R> resultType) {
return SqlHelper.execJoin(getEntityClass(), mapper -> mapper.selectJoinList(resultType, (MPJBaseJoin<T>) this));
@ -107,8 +107,8 @@ public interface Chain<T> {
* 构造方法必须传 class entity 否则会报错
* new MPJLambdaWrapper(User.class)
* new MPJQueryWrapper(User.class)
* MPJWrappers.\<User\>lambdaJoin(User.class)
* MPJWrappers.\<User\>queryJoin(User.class)
* JoinWrappers.\<User\>lambdaJoin(User.class)
* JoinWrappers.\<User\>queryJoin(User.class)
*/
default <P extends IPage<T>> P page(P page) {
return SqlHelper.exec(getEntityClass(), mapper -> mapper.selectPage(page, (Wrapper<T>) this));
@ -119,8 +119,8 @@ public interface Chain<T> {
* 构造方法必须传 class entity 否则会报错
* new MPJLambdaWrapper(User.class)
* new MPJQueryWrapper(User.class)
* MPJWrappers.\<User\>lambdaJoin(User.class)
* MPJWrappers.\<User\>queryJoin(User.class)
* JoinWrappers.\<User\>lambdaJoin(User.class)
* JoinWrappers.\<User\>queryJoin(User.class)
*/
default <R, P extends IPage<R>> P page(P page, Class<R> resultType) {
return SqlHelper.execJoin(getEntityClass(), mapper -> mapper.selectJoinPage(page, resultType, (MPJBaseJoin<T>) this));

View File

@ -44,6 +44,24 @@ public interface Query<Children> extends Serializable {
/**
* 过滤查询的字段信息(主键除外!)
* 推荐使用 selectFilter(Class, Predicate) 含主键
*
* @param predicate 过滤方式
* @return children
* @see Query#selectFilter(Class, Predicate)
*/
@Deprecated
default <E> Children select(Class<E> entityClass, Predicate<TableFieldInfo> predicate) {
TableInfo info = TableHelper.get(entityClass);
Asserts.hasTable(info, entityClass);
Map<String, SelectCache> 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();
}
/**
* 过滤查询的字段信息
* <p>例1: 只要 java 字段名以 "test" 开头的 -> select(i -> i.getProperty().startsWith("test"))</p>
* <p>例2: 只要 java 字段属性是 CharSequence 类型的 -> select(TableFieldInfo::isCharSequence)</p>
* <p>例3: 只要 java 字段没有填充策略的 -> select(i -> i.getFieldFill() == FieldFill.DEFAULT)</p>
@ -53,12 +71,12 @@ public interface Query<Children> extends Serializable {
* @param predicate 过滤方式
* @return children
*/
default <E> Children select(Class<E> entityClass, Predicate<TableFieldInfo> predicate) {
default <E> Children selectFilter(Class<E> entityClass, Predicate<SelectCache> predicate) {
TableInfo info = TableHelper.get(entityClass);
Asserts.hasTable(info, entityClass);
Map<String, SelectCache> 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<SelectCache> 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<Children> extends Serializable {
*
* @param column
*/
default <E> Children select(String column, SFunction<E, ?> alias) {
default <E> Children selectAs(String column, SFunction<E, ?> alias) {
getSelectColum().add(new SelectString(column + Constants.AS + LambdaUtils.getName(alias), isHasAlias(), getAlias()));
return getChildren();
}
@ -91,7 +109,7 @@ public interface Query<Children> extends Serializable {
*
* @param column
*/
default <E> Children select(String index, SFunction<E, ?> column, SFunction<E, ?> alias) {
default <E, X> Children selectAs(String index, SFunction<E, ?> column, SFunction<X, ?> alias) {
Map<String, SelectCache> cacheMap = ColumnCache.getMapField(LambdaUtils.getEntityClass(column));
SelectCache cache = cacheMap.get(LambdaUtils.getName(column));
getSelectColum().add(new SelectString(

View File

@ -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) {

View File

@ -637,7 +637,7 @@ class LambdaWrapperTest {
void test6() {
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
.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<UserDTO> page = userMapper.selectJoinPage(new Page<>(1, 10), UserDTO.class, wrapper);