MyBaits是一个开源的优秀的持久层框架,SQL语句与代码分离,面向配置的编程,良好支持复杂数据映射,动态SQL;MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

通常使用MyBatis时使用以下几种形式进行分页:

  1. 逻辑分页:RowBounds
  2. 物理分页: 在SQL里面使用LIMIT或者使用第三方插件(PageHelper等)

    环境及介绍#

    导入核心依赖:
Copy
<!-- 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个方法为:

Copy
Object intercept(Invocation invocation) throws Throwable; Object plugin(Object target); void setProperties(Properties properties);
  1. intercept 方法是主要拦截执行方法。
  2. plugin 方法是决定当前对象是否需要生成代理对象。
  3. setProperties 设置运行时mybatis核心配置参数方法。
    Mybatis的拦截器实现机制,使用的是JDKInvocationHandler,当我们调用ParameterHandler,ResultSetHandler,StatementHandler,Executor的对象的时候,实际上使用的是Plugin这个代理类的对象,这个类实现了InvocationHandler接口。
    当我们调用ParameterHandler,ResultSetHandler,StatementHandler,Executor的对象的时候,
    实际上使用的是Plugin这个代理类的对象,这个类实现了InvocationHandler接口。

    自定义分页实现#

    创建Pager实体对象,用来进行分页,实体内容如下:
Copy
@Data @ToString