25. Mybatis 分页插件-paginator

漆雕修德
2023-12-01

Mybatis 分页查看

Mybatis 并没有提供分页功能,需要自己写拦截器来实现.网上也有很多开源的分页插件可以使用,笔者使用的是github 提供的mybatis-paginator.

1. 集成方式

1.1 添加pom 依赖

<!-- 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>

1.2 配置插件

在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>

2. 使用方式

Mybatis 分页插件的使用方式特别简单, 方法只需要满足两个条件即可:

  • 方法参数只需要包含PageBounds 类型参数
  • 方法返回值为PageList

2.1 正常添加Mapper 片段

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>

2.2 添加接口方法

使用Java 方法重载技术,对同一sql片段实现分页与不分页操作.

@Mapper
public interface AdminMapper {

    /** 查询所有管理员列表 */
    public List<AdminPO> queryList();

    /** 分页查询:使用重载方式对同一sql片段做不同形式查询 */
    public PageList<AdminPO> queryList(PageBounds pageBounds);

}

2.3 调用方式

@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);
	}
}
 类似资料: