1.Pagehelper分页插件实现自动分页功能
Step1:配置pom文件
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.6</version>
</dependency>
Step2:配置application.yml文件
pagehelper:
helper-dialect: postgresql
reasonable: true
support-methods-arguments: true
params: countSql
Step3:配置运行类 Application 添加pagehelp插件,在main方法之后被加载
// mapper 接口类扫描包配置
@MapperScan(basePackages = "com.xxx.springbootdemo.mapper")
@SpringBootApplication
public class SpringBootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoApplication.class, args);
System.out.println("start success");
}
//配置mybatis的分页插件pageHelper
@Bean
public PageHelper pageHelper(){
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("offsetAsPageNum","true");
properties.setProperty("rowBoundsWithCount","true");
properties.setProperty("reasonable","true");
properties.setProperty("dialect","postgresql"); //配置postgresql数据库的方言支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库
pageHelper.setProperties(properties);
return pageHelper;
}
}
Step4:可以使用了!
Controller层:(PageRequest中的属性是page和row)
/**
* 分页查询所有图书信息
* @param request
* @return
*/
@RequestMapping(value = "/getAllBooks", method = RequestMethod.POST)
public Result getAllBooks(@Valid @RequestBody PageRequest request) {
PageInfo<BookPO> pageInfo = null;
pageInfo = bookService.getAllBooks(request.getPage(), request.getRow());
logger.info("获取图书列表成功, param page:{}, row:{}", request.getPage(), request.getRow());
return Result.isSuccess(MessageEnum.GET_ALL_BOOK_SUCCESS, pageInfo);
}
Service层:
public PageInfo<BookPO> getAllBooks(int page, int row) {
PageHelper.startPage(page, row, true);
PageHelper.orderBy("card");//根据card字段排序
List<BookPO> listPO = bookPOMapper.findAllBooks();
PageInfo<BookPO> pageInfo = new PageInfo<>(listPO);
logger.info("service getAllBooks param page:{}, row:{}", page, row);
return pageInfo;
}
Mapper:
<select id="findAllBooks" resultMap="BaseResultMap">
select * from book_table
</select>
2.PageHelper在不同层之间的转换
如果传给前端的PageInfo的List中的数据类型为BookVO,则需要将BookPO转换为BookVO再放入pageInfo。
如果将先BookPO转换为BookVO,再把List<BookVO>放入pageInfo,就会丢失pageInfo的一些信息,比如数据总条数等
所以应该将dao获取到的数据直接传递给PageInfo对象中就不会出现该问题。
Service层代码如下:
public PageInfo<BookVO> getAllBooks(int page, int row) {
PageHelper.startPage(page, row, true);
PageHelper.orderBy("card");
List<BookPO> listPO = bookPOMapper.findAllBooks();
PageInfo<BookVO> pageInfo = new PageInfo<>();
BeanUtils.copyProperties(new PageInfo<>(listPO), pageInfo);
pageInfo.setList(listPO.stream().map(bookPO -> new BookVO().convertBookPO(bookPO)).collect(Collectors.toList()));
logger.info("service getAllBooks param page:{}, row:{}", page, row);
return pageInfo;
}
BookVO.convertBookPO(BookPO po):
public BookVO convertBookPO(BookPO bookPO){
BookVO bookVO = new BookVO();
BeanUtils.copyProperties(bookPO, bookVO);
return bookVO;
}