mirror of
https://gitee.com/best_handsome/mybatis-plus-join
synced 2025-07-11 00:02:22 +08:00
adapter
This commit is contained in:
parent
18b2394e7e
commit
be34118e9d
@ -3,9 +3,14 @@ package com.github.yulichang.adapter.base;
|
||||
import com.baomidou.mybatisplus.core.handlers.IJsonTypeHandler;
|
||||
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
|
||||
import com.baomidou.mybatisplus.core.metadata.TableInfo;
|
||||
import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.MybatisUtils;
|
||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||
import com.github.yulichang.adapter.base.metadata.OrderFieldInfo;
|
||||
import com.github.yulichang.adapter.jsqlparser.JSqlParserHelper;
|
||||
import org.apache.ibatis.plugin.Interceptor;
|
||||
import org.apache.ibatis.session.Configuration;
|
||||
import org.apache.ibatis.type.TypeHandler;
|
||||
import org.apache.ibatis.type.TypeHandlerRegistry;
|
||||
@ -14,6 +19,8 @@ import org.apache.ibatis.type.UnknownTypeHandler;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -76,6 +83,24 @@ public interface IAdapter {
|
||||
return typeHandler;
|
||||
}
|
||||
|
||||
default void checkCollectionPage() {
|
||||
default void wrapperInnerPage(Interceptor interceptor, Predicate<Object> predicate, Function<Object, Object> function) {
|
||||
if (interceptor instanceof MybatisPlusInterceptor) {
|
||||
MybatisPlusInterceptor mybatisPlusInterceptor = (MybatisPlusInterceptor) interceptor;
|
||||
try {
|
||||
Field field = MybatisPlusInterceptor.class.getDeclaredField("interceptors");
|
||||
field.setAccessible(true);
|
||||
@SuppressWarnings("unchecked")
|
||||
List<InnerInterceptor> interceptors = (List<InnerInterceptor>) field.get(mybatisPlusInterceptor);
|
||||
|
||||
interceptors.replaceAll(i -> {
|
||||
if (i instanceof PaginationInnerInterceptor && !predicate.test(i)) {
|
||||
return (InnerInterceptor) function.apply(i);
|
||||
}
|
||||
return i;
|
||||
});
|
||||
} catch (Exception e) {
|
||||
throw ExceptionUtils.mpe(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,13 +3,13 @@ package com.github.yulichang.adapter.v33x;
|
||||
import com.baomidou.mybatisplus.core.MybatisPlusVersion;
|
||||
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
|
||||
import com.baomidou.mybatisplus.core.metadata.TableInfo;
|
||||
import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||
import com.github.yulichang.adapter.base.IAdapter;
|
||||
import com.github.yulichang.adapter.base.metadata.OrderFieldInfo;
|
||||
import com.github.yulichang.adapter.base.tookit.VersionUtils;
|
||||
import com.github.yulichang.adapter.jsqlparser.v46.JSqlParserHelperV46;
|
||||
import org.apache.ibatis.plugin.Interceptor;
|
||||
import org.apache.ibatis.session.Configuration;
|
||||
import org.apache.ibatis.type.TypeHandler;
|
||||
import org.apache.ibatis.type.TypeHandlerRegistry;
|
||||
@ -18,6 +18,8 @@ import java.lang.reflect.Field;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
@ -90,7 +92,6 @@ public class Adapter33x implements IAdapter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkCollectionPage() {
|
||||
throw ExceptionUtils.mpe("page by main need MP version 3.5.6+, current version: " + MybatisPlusVersion.getVersion());
|
||||
public void wrapperInnerPage(Interceptor interceptor, Predicate<Object> predicate, Function<Object, Object> function) {
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,6 @@ package com.github.yulichang.adapter.v3431;
|
||||
import com.baomidou.mybatisplus.core.MybatisPlusVersion;
|
||||
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
|
||||
import com.baomidou.mybatisplus.core.metadata.TableInfo;
|
||||
import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||
import com.github.yulichang.adapter.base.IAdapter;
|
||||
@ -11,6 +10,7 @@ import com.github.yulichang.adapter.base.metadata.OrderFieldInfo;
|
||||
import com.github.yulichang.adapter.base.tookit.VersionUtils;
|
||||
import com.github.yulichang.adapter.jsqlparser.v46.JSqlParserHelperV46;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.apache.ibatis.plugin.Interceptor;
|
||||
import org.apache.ibatis.session.Configuration;
|
||||
import org.apache.ibatis.type.TypeHandler;
|
||||
import org.apache.ibatis.type.TypeHandlerRegistry;
|
||||
@ -18,6 +18,8 @@ import org.apache.ibatis.type.TypeHandlerRegistry;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -63,7 +65,6 @@ public class Adapter3431 implements IAdapter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkCollectionPage() {
|
||||
throw ExceptionUtils.mpe("page by main need MP version 3.5.6+, current version: " + MybatisPlusVersion.getVersion());
|
||||
public void wrapperInnerPage(Interceptor interceptor, Predicate<Object> predicate, Function<Object, Object> function) {
|
||||
}
|
||||
}
|
||||
|
@ -1,15 +1,16 @@
|
||||
package com.github.yulichang.adapter.v355;
|
||||
|
||||
import com.baomidou.mybatisplus.core.MybatisPlusVersion;
|
||||
import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
|
||||
import com.github.yulichang.adapter.base.IAdapter;
|
||||
import com.github.yulichang.adapter.jsqlparser.v46.JSqlParserHelperV46;
|
||||
import org.apache.ibatis.plugin.Interceptor;
|
||||
import org.apache.ibatis.session.Configuration;
|
||||
import org.apache.ibatis.type.TypeHandler;
|
||||
import org.apache.ibatis.type.TypeHandlerRegistry;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
/**
|
||||
* @author yulichang
|
||||
@ -33,7 +34,6 @@ public class Adapter355 implements IAdapter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkCollectionPage() {
|
||||
throw ExceptionUtils.mpe("page by main need MP version 3.5.6+, current version: " + MybatisPlusVersion.getVersion());
|
||||
public void wrapperInnerPage(Interceptor interceptor, Predicate<Object> predicate, Function<Object, Object> function) {
|
||||
}
|
||||
}
|
@ -103,7 +103,6 @@ public class MPJInterceptor implements Interceptor {
|
||||
}
|
||||
if (wrapper.isResultMapCollection()) {
|
||||
if (map.values().stream().anyMatch(a -> a instanceof IPage) && !wrapper.isPageByMain()) {
|
||||
AdapterHelper.getAdapter().checkCollectionPage();
|
||||
// 一对多分页问题警告
|
||||
log.warn("select one to many and page query will result in errors in the total count statistics, please use xml.");
|
||||
}
|
||||
|
@ -1,19 +1,13 @@
|
||||
package com.github.yulichang.toolkit;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||
import com.github.yulichang.adapter.AdapterHelper;
|
||||
import com.github.yulichang.interceptor.MPJInterceptor;
|
||||
import com.github.yulichang.interceptor.pagination.PageInnerInterceptorWrapper;
|
||||
import org.apache.ibatis.logging.Log;
|
||||
import org.apache.ibatis.logging.LogFactory;
|
||||
import org.apache.ibatis.plugin.Interceptor;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
/**
|
||||
@ -26,8 +20,6 @@ import java.util.function.Predicate;
|
||||
*/
|
||||
public class InterceptorList<E extends Interceptor> extends ArrayList<E> {
|
||||
|
||||
private static final Log log = LogFactory.getLog(InterceptorList.class);
|
||||
|
||||
public InterceptorList() {
|
||||
super();
|
||||
}
|
||||
@ -72,28 +64,7 @@ public class InterceptorList<E extends Interceptor> extends ArrayList<E> {
|
||||
}
|
||||
|
||||
private void wrapperInnerPage(Interceptor interceptor) {
|
||||
try {
|
||||
AdapterHelper.getAdapter().checkCollectionPage();
|
||||
} catch (Exception e) {
|
||||
return;
|
||||
}
|
||||
if (interceptor instanceof MybatisPlusInterceptor) {
|
||||
MybatisPlusInterceptor mybatisPlusInterceptor = (MybatisPlusInterceptor) interceptor;
|
||||
try {
|
||||
Field field = MybatisPlusInterceptor.class.getDeclaredField("interceptors");
|
||||
field.setAccessible(true);
|
||||
@SuppressWarnings("unchecked")
|
||||
List<InnerInterceptor> interceptors = (List<InnerInterceptor>) field.get(mybatisPlusInterceptor);
|
||||
|
||||
interceptors.replaceAll(i -> {
|
||||
if (i instanceof PaginationInnerInterceptor && !(i instanceof PageInnerInterceptorWrapper)) {
|
||||
return new PageInnerInterceptorWrapper((PaginationInnerInterceptor) i);
|
||||
}
|
||||
return i;
|
||||
});
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
AdapterHelper.getAdapter().wrapperInnerPage(interceptor, p -> p instanceof PageInnerInterceptorWrapper,
|
||||
p -> new PageInnerInterceptorWrapper((PaginationInnerInterceptor) p));
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,25 @@
|
||||
package com.github.yulichang.test.util;
|
||||
|
||||
import com.github.yulichang.wrapper.interfaces.DoSomething;
|
||||
|
||||
public final class Loop {
|
||||
|
||||
public static void loop(DoSomething doSomething) {
|
||||
long a = System.currentTimeMillis();
|
||||
for (int i = 0; i < 1000_0000; i++) {
|
||||
if (i % 1000 == 0) {
|
||||
Runtime runtime = Runtime.getRuntime();
|
||||
long usedMemory = runtime.totalMemory() - runtime.freeMemory();
|
||||
long maxMemory = runtime.maxMemory();
|
||||
long freeMemory = runtime.freeMemory();
|
||||
System.out.println(i + " " + (System.currentTimeMillis() - a));
|
||||
System.out.println("已用内存:" + usedMemory);
|
||||
System.out.println("最大内存:" + maxMemory);
|
||||
System.out.println("空闲内存:" + freeMemory);
|
||||
System.out.println("-----------------------------");
|
||||
a = System.currentTimeMillis();
|
||||
}
|
||||
doSomething.doIt();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user