yulichang 2023-05-17 18:00:40 +08:00
parent e8f0910049
commit ed0af0f42c
2 changed files with 36 additions and 7 deletions

View File

@ -86,7 +86,7 @@ public class MPJInterceptor implements Interceptor {
if (ew instanceof MPJLambdaWrapper) { if (ew instanceof MPJLambdaWrapper) {
MPJLambdaWrapper wrapper = (MPJLambdaWrapper) ew; MPJLambdaWrapper wrapper = (MPJLambdaWrapper) ew;
if (wrapper.getEntityClass() == null) { if (wrapper.getEntityClass() == null) {
wrapper.setEntityClass(MPJTableMapperHelper.getEntity(getEntity(ms.getId()))); wrapper.setEntityClass(MPJTableMapperHelper.getEntity(getEntity(ms.getId(), ms.getResource())));
} }
if (wrapper.getSelectColumns().isEmpty() && wrapper.getEntityClass() != null) { if (wrapper.getSelectColumns().isEmpty() && wrapper.getEntityClass() != null) {
wrapper.selectAll(wrapper.getEntityClass()); wrapper.selectAll(wrapper.getEntityClass());
@ -359,12 +359,30 @@ public class MPJInterceptor implements Interceptor {
} }
} }
private Class<?> getEntity(String id) { private Class<?> getEntity(String id, String resource) {
Class<?> clazz = null;
try { try {
return Class.forName(id.substring(0, id.lastIndexOf(StringPool.DOT))); String className = id.substring(0, id.lastIndexOf(StringPool.DOT));
} catch (ClassNotFoundException e) { try {
return null; clazz = Class.forName(className);
} catch (ClassNotFoundException e) {
clazz = MPJTableMapperHelper.getMapperForName(className);
}
} catch (Exception ignored) {
} }
if (Objects.nonNull(clazz)) {
return clazz;
}
try {
String className = resource.substring(0, id.lastIndexOf(StringPool.DOT)).replaceAll("/",StringPool.DOT);
try {
clazz = Class.forName(className);
} catch (ClassNotFoundException e) {
clazz = MPJTableMapperHelper.getMapperForName(className);
}
} catch (Exception ignored) {
}
return clazz;
} }
private String removeDot(String str) { private String removeDot(String str) {

View File

@ -1,6 +1,9 @@
package com.github.yulichang.toolkit; package com.github.yulichang.toolkit;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
/** /**
@ -13,21 +16,29 @@ public class MPJTableMapperHelper {
private static final Map<Class<?>, Class<?>> CACHE = new ConcurrentHashMap<>(); private static final Map<Class<?>, Class<?>> CACHE = new ConcurrentHashMap<>();
private static final Map<Class<?>, Class<?>> CACHE_REVERSE = new ConcurrentHashMap<>(); private static final Map<Class<?>, Class<?>> CACHE_REVERSE = new ConcurrentHashMap<>();
private static final Map<String, Class<?>> CACHE_MAPPER = new ConcurrentHashMap<>();
public static void init(Class<?> clazz, Class<?> mapper) { public static void init(Class<?> clazz, Class<?> mapper) {
if (clazz != null && mapper != null) { if (clazz != null && mapper != null) {
CACHE.put(clazz, mapper); CACHE.put(clazz, mapper);
CACHE_REVERSE.put(mapper, clazz); CACHE_REVERSE.put(mapper, clazz);
CACHE_MAPPER.put(mapper.getName(), mapper);
} }
} }
public static Class<?> getMapper(Class<?> clazz) { public static Class<?> getMapper(Class<?> clazz) {
return CACHE.get(clazz); return Optional.ofNullable(clazz).map(m -> CACHE.get(clazz)).orElse(null);
} }
public static Class<?> getEntity(Class<?> clazz) { public static Class<?> getEntity(Class<?> clazz) {
return CACHE_REVERSE.get(clazz); return Optional.ofNullable(clazz).map(m -> CACHE_REVERSE.get(clazz)).orElse(null);
} }
public static Class<?> getMapperForName(String name) {
if (StringUtils.isBlank(name)) {
return null;
}
return CACHE_MAPPER.get(name);
}
} }