我们之前在学习Mybatis的时候, 如果需要分页,我们是自己编写分页sql,并编写分页实体类来完成分页,但是这种全部手动编写,太麻烦了,其实Mybatis提供了分页插件,来解放我们的双手,那接下来我们就来学习Mybatis提供的分页插件pagehelper.
PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件
1.导入分页插件依赖
<!-- pagehelper 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.6</version>
</dependency>
2.配置pagehelper参数
# PageHelper分页插件
pagehelper:
helperDialect: mysql
supportMethodsArguments: true
params: count=countSql
3.如何在代码中使用
1)RowBounds方式的调用
使用这种调用方式时,你可以使用RowBounds参数进行分页,这种方式侵入性最小,我们可以看到,通过RowBounds方式调用只是使用了这个参数,并没有增加其他任何内容。分页插件检测到使用了RowBounds参数时,就会对该查询进行物理分页
@SpringBootTest
public class MyTest {
@Autowired
private SqlSession sqlSession;
@Test
public void test1(){
//System.out.println(sqlSession);
List<SysConfig> list = sqlSession.selectList("com.fs.system.mapper.SysConfigMapper.selectConfigList", new SysConfig(), new RowBounds(1, 2));
System.out.println(list);
}
}
注意: 由于默认情况下的 RowBounds
无法获取查询总数,分页插件提供了一个继承自 RowBounds
的 PageRowBounds
,这个对象中增加了 total
属性,执行分页查询后,可以从该属性得到查询总数。
2)PageHelper.startPage
静态方法调用
除了 PageHelper.startPage
方法外,还提供了类似用法的 PageHelper.offsetPage
方法。
在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage
静态方法即可,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
import com.common.core.pojo.SysConfig;
import com.system.mapper.SysConfigMapper;
import com.github.pagehelper.PageHelper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class MyTest {
@Autowired
private SysConfigMapper sysConfigMapper;
@Test
public void test2(){
PageHelper.startPage(1, 2);
List<SysConfig> list = sysConfigMapper.selectList(null);
System.out.println(list);
}
}
3)使用参数方式
想要使用参数方式,需要配置 supportMethodsArguments
参数为 true
,同时要配置 params
参数。 例如下面的配置:
pagehelper:
helperDialect: mysql
supportMethodsArguments: true
params: count=countSql;pageNum=pageNumKey;pageSize=pageSizeKey;
在 Mapper方法中:
List<SysConfig> selectConfigList(
@Param("sysConfig") SysConfig sysConfig,
@Param("pageNumKey") int pageNum,
@Param("pageSizeKey") int pageSize);