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
bfab4f289e
commit
bb5c5df261
@ -7,25 +7,34 @@ import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
||||
import com.github.yulichang.relation.Relation;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* 注解映射Mapper 用于替代 MPJDeepMapper
|
||||
*
|
||||
* @author yulichang
|
||||
* @since 1.4.3
|
||||
*/
|
||||
public interface MPJRelationMapper<T> extends BaseMapper<T> {
|
||||
|
||||
default <R, M extends BaseMapper<T>> R selectRelation(Function<M, R> function) {
|
||||
return selectRelation(function, new ArrayList<>());
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过注解实现单表多次查询
|
||||
*
|
||||
* @param function BaseMapper调用方法
|
||||
* @param deep 是否深度查询
|
||||
* @param prop 属性过滤, 可以只查询需要映射的属性
|
||||
* @param list 属性过滤, 可以只查询需要映射的属性
|
||||
* @see com.github.yulichang.annotation.EntityMapping
|
||||
* @see com.github.yulichang.annotation.FieldMapping
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
default <R, M extends BaseMapper<T>> R selectRelation(Function<M, R> function, boolean deep, SFunction<T, ?>... prop) {
|
||||
default <R, M extends BaseMapper<T>> R selectRelation(Function<M, R> function, List<SFunction<T, ?>> list) {
|
||||
R r = function.apply((M) this);
|
||||
if (Objects.isNull(r)) {
|
||||
return null;
|
||||
@ -42,7 +51,7 @@ public interface MPJRelationMapper<T> extends BaseMapper<T> {
|
||||
if (Object.class == t.getClass()) {
|
||||
return r;
|
||||
}
|
||||
return (R) Relation.list(data, Arrays.asList(prop), deep);
|
||||
return (R) Relation.list(data, list);
|
||||
}
|
||||
}
|
||||
if (r instanceof IPage) {
|
||||
@ -55,7 +64,7 @@ public interface MPJRelationMapper<T> extends BaseMapper<T> {
|
||||
if (Object.class == t.getClass()) {
|
||||
return r;
|
||||
}
|
||||
Relation.list(data.getRecords(), Arrays.asList(prop), deep);
|
||||
Relation.list(data.getRecords(), list);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
@ -72,6 +81,6 @@ public interface MPJRelationMapper<T> extends BaseMapper<T> {
|
||||
return r;
|
||||
}
|
||||
T data = (T) r;
|
||||
return (R) Relation.one(data, Arrays.asList(prop), deep);
|
||||
return (R) Relation.one(data, list);
|
||||
}
|
||||
}
|
||||
|
@ -16,9 +16,8 @@ import java.util.stream.Collectors;
|
||||
@SuppressWarnings("all")
|
||||
public class Relation {
|
||||
|
||||
// private static final List EMPTY_LIST = new ArrayList<>();
|
||||
|
||||
public static <T> List<T> list(List<T> data, List<SFunction<T, ?>> property, boolean deep) {
|
||||
public static <T> List<T> list(List<T> data, List<SFunction<T, ?>> property) {
|
||||
if (CollectionUtils.isEmpty(data)) {
|
||||
return data;
|
||||
}
|
||||
@ -38,12 +37,8 @@ public class Relation {
|
||||
data.forEach(i -> mpjBindData(i, fieldInfo, joinList));
|
||||
fieldInfo.removeJoinField(joinList);
|
||||
if (CollectionUtils.isEmpty(joinList)) {
|
||||
// continue;
|
||||
continue;
|
||||
}
|
||||
// //深度查询
|
||||
// if (deep) {
|
||||
//
|
||||
// }
|
||||
} else {
|
||||
data.forEach(i -> fieldInfo.fieldSet(i, new ArrayList<>()));
|
||||
}
|
||||
@ -62,7 +57,7 @@ public class Relation {
|
||||
*
|
||||
* @param t 第一次查询结果
|
||||
*/
|
||||
public static <T> T one(T t, List<SFunction<T, ?>> property, boolean deep) {
|
||||
public static <T> T one(T t, List<SFunction<T, ?>> property) {
|
||||
if (t == null) {
|
||||
return null;
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -23,7 +24,7 @@ class MappingTest {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
List<UserDO> dos = userMapper.selectRelation(e -> e.selectList(new QueryWrapper<>()), true);
|
||||
List<UserDO> dos = userMapper.selectRelation(e -> e.selectList(new QueryWrapper<>()), Collections.singletonList(UserDO::getAddressId));
|
||||
System.out.println(1);
|
||||
}
|
||||
|
||||
@ -32,7 +33,7 @@ class MappingTest {
|
||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||
.selectAll(UserDO.class)
|
||||
.leftJoin(AddressDO.class, AddressDO::getId, UserDO::getAddressId);
|
||||
List<UserDO> dos = userMapper.selectRelation(e -> e.selectList(wrapper), true);
|
||||
List<UserDO> dos = userMapper.selectRelation(e -> e.selectList(wrapper));
|
||||
System.out.println(1);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user