mirror of
https://gitee.com/best_handsome/mybatis-plus-join
synced 2025-07-11 00:02:22 +08:00
优化异常提示
This commit is contained in:
parent
a74c07f059
commit
7c6173d3d2
@ -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;
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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));
|
||||
|
@ -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(
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user