使用PageHelper对象进行分页,PageHelper支持多种数据库,不同的数据库需要不同的语法
使用步骤:
1.maven添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>
2.mybatis主配置文件中加入plugin配置
在enviroments标签之前添加
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"/>
</plugins>
或者编程方式
//加载resources/db.properties 配置文件
@PropertySource("classpath:db.properties")
//扫描有Mapper注解的接口 @Mapper 主要是解决,单元测试时报红
@ComponentScan("cn.webrx.mapper")
//也是扫描包,在接口上可以不加@Mapper
@tk.mybatis.spring.annotation.MapperScan("cn.webrx")
public class MybatisConfig {
@Value("${db.driver:com.mysql.cj.jdbc.Driver}")
private String driver;
@Value("${db.url:jdbc:mysql:/db}")
private String url;
@Value("${db.username:admin}")
private String username;
@Value("${db.password:123}")
private String password;
@Autowired
private SnoFlakeInterceptor sfi;
@Autowired
private PageInterceptor pgh;
@Bean(name = "ds", initMethod = "init", destroyMethod = "close")
@Primary
public DruidDataSource ds() {
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUsername(username);
ds.setPassword(password);
ds.setUrl(url);
return ds;
}
@Bean(name = "sf")
@Primary
public SqlSessionFactoryBean sf(DruidDataSource ds) throws IOException {
SqlSessionFactoryBean sf = new SqlSessionFactoryBean();
sf.setDataSource(ds);
// resources/mapper/XxxMapper.xml
sf.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*Mapper*.xml"));
//添加分页插件拦截器
sf.setPlugins(sfi, pgh);
//sf.setPlugins(new SnoFlakeInterceptor());
//扫描定义别名 cn.webrx.entity.Book 别名为 book
sf.setTypeAliasesPackage("cn.webrx");
return sf;
}@Bean("pgh")
public PageInterceptor pageInterceptor(){
return new PageInterceptor();
}
}
3.PageHelper对象
在你的查询方法前加入PageHelper方法调用
PageHelper.StartPage(pageNum,PageSize);
//PageHelper的方法分页,pageNum:第几页从1开始,pageSize:一页中有多少行数据
@SpringJUnitConfig(SpringConfig.class)
public class MyTest {
@Autowired(required = false)
DbMapper dm;
@Autowired
BookMapper bm;
@Autowired
IdWorker idWorker;
@Autowired
StudentMapper sm;
@Test
public void m1(){
PageHelper.startPage(2,10);
System.out.println(bm.selectAll());
}
@Test
public void m6(){
//分页
//PageHelper.startPage(1, 3);
//分页+排序功能
//PageHelper.startPage(1, 3, "id desc");
//分页+1,3) 默认是true 计算记录总数,如果是false,不计算总记录数 没有select
//count(*),pp.getTotal() = -1
//PageHelper.startPage(1,3,false); //没有select count(*)
//PageHelper.startPage(1,3,true); //有select count(*) pp.getTotal()=19
//第一个 true 是否查询 select count(*) 求
//第二个 true 分页的合理化,如果pageNum<=0 显示第1页 pageNum>pages 显示最pages页 最后一页
//第三个 true 代码如果pagesize = 0,查看所有,就是不分页
PageHelper.startPage(2,10);
PageInfo pp=PageInfo.of(bm.selectAll());
System.out.println(pp.getPageNum());//当前页 2
System.out.println(pp.getPages());//共有多少页 2
System.out.println(pp.getPageSize());//每页多少条 10
System.out.println(pp.getTotal());//总记录数 总条数 17
List<Map<String, Object>> list = pp.getList();//获取当前页的数据
System.out.println(list);
}
}