1.一般我们使用maven管理项目,那么只需要额外导入如下pom即可:
<!--自定义分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.1</version>
</dependency>
2.需要在sqlSessionFactory中进行自定义拦截器的配置,
//分页插件
@Bean
public PageInterceptor pageInterceptor() throws IOException {
PageInterceptor pageInterceptor = new PageInterceptor();
pageInterceptor.setProperties(PropertyUtil.loadProps("pageInterceptor.properties"));
return pageInterceptor;
}
@Bean
public SqlSessionFactoryBean sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource());
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sqlSessionFactory.setMapperLocations
(new Resource[]{resolver.getResource("classpath:mapper/UserMapper.xml")
, resolver.getResource("classpath:mapper/ItemMapper.xml")
, resolver.getResource("classpath:mapper/OrderMapper.xml")});
sqlSessionFactory.setPlugins(new Interceptor[]{pageInterceptor()});
return sqlSessionFactory;
}
3.在pageInterceptor.properties文件中可以对分页拦截器做一些配置,为了方便新手我简单贴一下自己配置:
offsetAsPageNum=true
reasonable=true
helperDialect=mysql
4.配置好后我们在mapper.xml文件中就无需像原来一样用select count(0) from TABLE_NAME,查出总记录数,再写一条带有where if 和limit a,b的语句来进行手动的分页查询,在mapper文件中我们可以直接写select * from TABLE_NAME,后面也可以加上动态查询条件,比如根据id,name,desc的模糊查询等,都可以自动的分页查询出来.
5,使用分页有多种方法,我个人觉得文档的第二种比较简单,也就是
@Override
public PageInfo<Item> selectSelective(Item item, String pageNum,String pageSize){
if(pageNum==null){
pageNum="1";
}
PageHelper.startPage(Integer.parseInt(pageNum),Integer.parseInt(pageSize));
List<Item> itemList= itemMapper.selectSelective(item);
PageInfo<Item> pageInfo = new PageInfo<>(itemList);
return pageInfo;
}
也就是在你要进行分页查询时先写一条PageHelper.startPage(Integer.parseInt(pageNum),Integer.parseInt(pageSize)),传入当前页码数和每页显示的记录数,下面一定要紧跟你要查询的具体方法,两句代码一定要放在一起,否则可能会导致安全问题.
6.查询出来是一个List集合,里面包含了POJO,为了在前台获取分页的相关数据,需要返回的是一个PageInfo对象,在new PageInfo对象时将我们的List传入PageInfo对象中,这样在前台就可以通过pageInfo.list取出POJO对象集合,总之分页所需的一切属性都在pageInfo里面,读读源码就了解啦~~~这样在Controller中直接把pageinfo传给前台就可以使用了