Mybatis 并没有提供分页功能,需要自己写拦截器来实现.网上也有很多开源的分页插件可以使用,笔者使用的是github 提供的mybatis-paginator.
<!-- https://mvnrepository.com/artifact/com.github.miemiedev/mybatis-paginator -->
<dependency>
<groupId>com.github.miemiedev</groupId>
<artifactId>mybatis-paginator</artifactId>
<version>1.2.17</version>
</dependency>
在mybatis配置文件plugins 节点下添加插件配置.
<configuration>
<plugins>
<!-- 分页插件 -->
<plugin interceptor="com.github.miemiedev.mybatis.paginator.OffsetLimitInterceptor">
<property name="dialectClass" value="com.github.miemiedev.mybatis.paginator.dialect.MySQLDialect"/>
</plugin>
</plugins>
</configuration>
Mybatis 分页插件的使用方式特别简单, 方法只需要满足两个条件即可:
sql 片段和原来无异,完全可以通过方法重载机制对同一sql片段实现分页与不分页查询。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.songxu.flower.mapper.AdminMapper">
<!-- 查询所有 -->
<select id="queryList" resultType="AdminPO">
SELECT * FROM flower_admin
</select>
</mapper>
使用Java 方法重载技术,对同一sql片段实现分页与不分页操作.
@Mapper
public interface AdminMapper {
/** 查询所有管理员列表 */
public List<AdminPO> queryList();
/** 分页查询:使用重载方式对同一sql片段做不同形式查询 */
public PageList<AdminPO> queryList(PageBounds pageBounds);
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class AdminMapperTest {
// 普通查询
@Test
public void getList(){
List<AdminPO> adminPOS = this.adminMapper.queryList();
System.out.println("普通查询结果:");
adminPOS.forEach(System.out::println);
}
// 分页查询
@Test
public void getPage(){
PageBounds pageBounds = new PageBounds(1, 3);
PageList<AdminPO> pager = this.adminMapper.queryList(pageBounds);
System.out.println("分页查询结果:");
Paginator paginator = pager.getPaginator();
System.out.println(paginator.getTotalCount());
System.out.println(paginator.getPage());
System.out.println(pager.size());
pager.iterator().forEachRemaining(System.out::println);
}
}