diff --git a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/IAdapter.java b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/IAdapter.java index 770dfe7..fe32e09 100644 --- a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/IAdapter.java +++ b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/IAdapter.java @@ -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 predicate, Function function) { + if (interceptor instanceof MybatisPlusInterceptor) { + MybatisPlusInterceptor mybatisPlusInterceptor = (MybatisPlusInterceptor) interceptor; + try { + Field field = MybatisPlusInterceptor.class.getDeclaredField("interceptors"); + field.setAccessible(true); + @SuppressWarnings("unchecked") + List interceptors = (List) 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); + } + } } } diff --git a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/Adapter33x.java b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/Adapter33x.java index 80a34b0..e684d9f 100644 --- a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/Adapter33x.java +++ b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/Adapter33x.java @@ -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 predicate, Function function) { } } diff --git a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v3431/src/main/java/com/github/yulichang/adapter/v3431/Adapter3431.java b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v3431/src/main/java/com/github/yulichang/adapter/v3431/Adapter3431.java index b1b1820..2cbab37 100644 --- a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v3431/src/main/java/com/github/yulichang/adapter/v3431/Adapter3431.java +++ b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v3431/src/main/java/com/github/yulichang/adapter/v3431/Adapter3431.java @@ -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 predicate, Function function) { } } diff --git a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v355/src/main/java/com/github/yulichang/adapter/v355/Adapter355.java b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v355/src/main/java/com/github/yulichang/adapter/v355/Adapter355.java index 9e1bbbe..173763d 100644 --- a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v355/src/main/java/com/github/yulichang/adapter/v355/Adapter355.java +++ b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v355/src/main/java/com/github/yulichang/adapter/v355/Adapter355.java @@ -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 predicate, Function function) { } } \ No newline at end of file diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java index 112bbf6..3534987 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java @@ -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."); } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/InterceptorList.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/InterceptorList.java index 26f6145..551d24a 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/InterceptorList.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/InterceptorList.java @@ -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 extends ArrayList { - private static final Log log = LogFactory.getLog(InterceptorList.class); - public InterceptorList() { super(); } @@ -72,28 +64,7 @@ public class InterceptorList extends ArrayList { } 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 interceptors = (List) 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)); } } diff --git a/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/util/Loop.java b/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/util/Loop.java new file mode 100644 index 0000000..e3ad6c1 --- /dev/null +++ b/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/util/Loop.java @@ -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(); + } + } +}