MyBatis-Pageable
是一款自动化分页的插件,基于MyBatis
内部的插件Interceptor
拦截器编写完成,拦截Executor.query
的两个重载方法计算出分页的信息以及根据配置的数据库Dialect
自动执行不同的查询语句完成总数量的统计。
支持的数据库
MyBatis-Pageable
目前支持的主流数据库:
- DB2
- Derby
- DM、
- H2、
- HSQL、
- InforMix、
- Mariadb、
- MySQL、
- Oracle、
- Postgres、
- SqlLite、
- SqlServer2000以上版本
快速开始
MyBatis-Pageable
可以在传统的Spring
项目内使用,也可以在最新SpringBoot
项目内使用。
SpringBoot集成
MyBatis-Pageable
目前已经上传到Maven
中央仓库,你可以随时配置依赖使用,如果你是Maven
管理的项目,复制如下代码到你的pom.xml
配置文件内:
<dependency>
<groupId>com.gitee.hengboy</groupId>
<artifactId>spring-boot-starter-mybatis-pageable</artifactId>
<version>{lastVersion}</version>
</dependency>
如果你使用的Gradle
管理的项目,那么你需要复制如下的代码到你们的build.gradle
文件内:
compile 'com.gitee.hengboy:mybatis-pageable:{lastVersion}'
注意:上面内容需要把
{lastVersion}
改成目前最新版本的MyBatis-Pageable
版本号
配置插件
添加完成 starter
依赖后,你可以在配置文件application.yml
或者application.properties
内完成配置,下面是yml
格式配置:
hengboy:
pageable:
dialect: mysql
在使用pageable
时你仅仅需要配置一个数据库方言,如果你使用MySQL
或者MariaDB
数据库你可以不配置数据库方言。
传统Spring集成
使用mybatis-config.xml 配置插件
如果你项目中配置使用了mybatis-config.xml
,那么你需要添加如下代码到你的配置文件:
<plugins>
<plugin interceptor="com.gitee.hengboy.mybatis.pageable.interceptor.MyBatisExecutePageableInterceptor">
<!-- 配置数据库方言 -->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
使用application.xml 配置插件
当然你如果不使用mybatis-config.xml
配置文件配置插件,也可以通过SqlSessionFactoryBean
的插件列表来完成集成MyBatis-Pageable
,如下配置:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 配置插件列表 -->
<property name="plugins">
<array>
<bean class="com.gitee.hengboy.mybatis.pageable.interceptor.MyBatisExecutePageableInterceptor">
<property name="properties">
<!-- 配置数据库方言 -->
<value>
dialect=mysql
</value>
</property>
</bean>
</array>
</property>
</bean>
怎么使用?
目前MyBatis-Pageable
使用比较简单,有一个分页请求类PageableRequest
来完成自动分页操作,我们来看个简单的示例:
Page<UserEntity> page = PageableRequest.of(1, 5).request(() -> userMapper.selectAll());
-
of
配置分页的当前页码
以及每页的限制条数
-
request
该方法需要传递一个夜晚逻辑方法,也就是你需要执行分页的方法
Page对象详解
在上面简单的一行代码就可以完成自动分页以及读取出分页相关的信息,分页执行后我们通过Page
对象都可以获取到什么内容呢?
-
data
分页后的数据列表,具体的返回值可以使用Page<T>
泛型接收 -
totalPages
总页数 -
totalElements
总条数 -
pageIndex
当前页码 -
pageSize
每页限制条数 -
offset
分页开始位置 -
endRow
分页结束位置 -
hasNext
是否存在下一页,true
:存在,false
:不存在 -
hasPrevious
是否存在上一页,true
:存在,false
:不存在 -
isFirst
是否为首页,true
:首页,false
:非首页 -
isLast
是否为末页,true
:末页,false
:非末页
翻页查询
实际开发过程中存在这种情况,虽然传递的分页页码为1
,但是种种判断过后我需要查询上一页
或者下一页
、首页
的数据,这时候你就可以PageableRequest
对象的next()
、previous()
、first()
方法来处理这种事情的发生,如下示例:
Pageable pageable = PageableRequest.of(2, 10);
if (xx = xx) {
pageable.next();
}
Page<UserEntity> page = pageable.request(()->userMapper.selectAll());
上面是翻页到下一页
的查询示例,当然这个功能是为了尽可能的方便分页的使用,同样的previous()
、first()
方法都可以这么使用。
学习目录推荐
- SpringBoot配套源码地址:https://gitee.com/hengboy/spring-boot-chapter、https://github.com/hengyuboy/spring-boot-chapter
- SpringCloud配套源码地址:https://gitee.com/hengboy/spring-cloud-chapter
- SpringBoot相关系列文章请访问:目录:SpringBoot学习目录
- QueryDSL相关系列文章请访问:QueryDSL通用查询框架学习目录
- SpringDataJPA相关系列文章请访问:目录:SpringDataJPA学习目录
码云地址:https://gitee.com/hengboy/mybatis-pageable
其他开源信息
这段时间一直在编写开源的相关框架,致力于公司使用的框架升级以及开源计划,将公司使用到的工具
以及插件
进行升级重构并且开源。
- 代码生成器(Code-Builder)
code-builder
代码生成器根据你提供的模板文件(目前支持freemarker
)自动生成实体类,可以很大很有效的提高开发效率。
Gitee地址
:https://gitee.com/hengboy/code-builder
Github地址
:https://github.com/hengyuboy/code-builder - 持久化框架(MyBatis-Enhance)
mybatis-enhance
是一个对mybatis
框架的增强封装,提供一系列的内部方法来完成单表数据的操作,多表数据提供DSL
方式进行操作。
Gitee地址
:https://gitee.com/hengboy/mybatis-enhance
Github地址
:https://github.com/hengyuboy/mybatis-enhance