一、mybatis中使用PageHelper进行分页
- 导包pagehelper
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>3.7.5</version>
</dependency>
- 配置分页
application.properties
#配置分页
pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
pagehelper.params=countSql
- 测试
(1)开启分页
(2)进行查询,得到list
(3)封装list到 PageInfo对象中自动分页
@RequestMapping("/getUser2")
public PageInfo<User> getUser2(@RequestParam(defaultValue = "1") Integer currentPage, @RequestParam(defaultValue = "3") Integer pageSize){
//1、开启分页
PageHelper.startPage(currentPage,pageSize);
List<User> userList = userMapper.findAll();
//2、封装list到 PageInfo对象中自动分页
PageInfo<User> userPageInfo = new PageInfo<>(userList);
return userPageInfo;
}
二、PageInfo中分页对象的转化
既然这样就完成了分页,那么今天讨论的问题到底是干嘛的呢?
是这样的,正常情况下PageInfo中的泛型必须是数据库的实体类对象,即PO对象。正常开发中不可避免的要使用到其他的包括DTO,VO等对象,在对VO等对象分页时,如果直接返回VO泛型的PageInfo对象,该对象中则没有数据,所以要进一步对PageInfo对象进行封装,转换其泛型。
即要对非数据库对应的实体类集合分页时,直接传入list是不生效的,必须对PageInfo进行进一步的处理。
- 定义两个实体类,一个是pojo类,另一个是vo类
User.java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
//用户名
private String username;
//密码
private String password;
//昵称
private String nickname;
}
UserVo.java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserVo {
private Integer id;
//用户名
private String username;
//昵称
private String nickname;
}
- 分页逻辑实现
主要是将 PageInfo<User> 转为 PageInfo<UserVo>
(1)开启分页,将 userList 到 PageInfo 对象中
(2)将 PageInfo 转换为 UserVo 类型
(3)将 userVoList 放到 PageInfo 中
@RequestMapping("/getUser")
public PageInfo<UserVo> getUser(@RequestParam(defaultValue = "1") Integer currentPage, @RequestParam(defaultValue = "3") Integer pageSize){
//1、开启分页
PageHelper.startPage(currentPage,pageSize);
List<User> userList = userMapper.findAll();
//2、将userList到PageInfo对象中
PageInfo<User> userPageInfo = new PageInfo<>(userList);
//3、将PageInfo转换为 UserVo 类型
PageInfo<UserVo> userVotPageInfo = PageUtils.PageInfo2PageInfoVo(userPageInfo);
//4、将po对象的值赋给vo对象中
List<UserVo> userVoList = new ArrayList<>();
for (User u : userList) {
UserVo userVo = new UserVo(u.getId(), u.getUsername(), u.getNickname());
userVoList.add(userVo);
}
//5、将userVoList放到PageInfo中
userVotPageInfo.setList(userVoList);
return userVotPageInfo;
}