MyBatis拦截器自定义分页插件实现
MyBaits
是一个开源的优秀的持久层框架,SQL语句与代码分离,面向配置的编程,良好支持复杂数据映射,动态SQL;MyBatis
是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
通常使用MyBatis
时使用以下几种形式进行分页:
- 逻辑分页:RowBounds
-
物理分页: 在SQL里面使用LIMIT或者使用第三方插件(PageHelper等)
环境及介绍#
导入核心依赖:
<!-- SpringBoot MyBatis starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
搭建环境步骤可以参考:SpringBoot企业中常用starter
本次主要实现一个接口org.apache.ibatis.plugin.Interceptor
,在接口中有3个方法为:
Object intercept(Invocation invocation) throws Throwable; Object plugin(Object target); void setProperties(Properties properties);
- intercept 方法是主要拦截执行方法。
- plugin 方法是决定当前对象是否需要生成代理对象。
-
setProperties 设置运行时mybatis核心配置参数方法。
Mybatis的拦截器实现机制,使用的是JDK
的InvocationHandler
,当我们调用ParameterHandler,ResultSetHandler,StatementHandler,Executor
的对象的时候,实际上使用的是Plugin
这个代理类的对象,这个类实现了InvocationHandler接口。
当我们调用ParameterHandler,ResultSetHandler,StatementHandler,Executor
的对象的时候,
实际上使用的是Plugin
这个代理类的对象,这个类实现了InvocationHandler
接口。自定义分页实现#
创建Pager
实体对象,用来进行分页,实体内容如下:
@Data @ToString