每次写分页都很烦,记录一下实现分页查询的全过程,以后想写分页可以直接改模板
1、
首先分页肯定是要记录页码和页面大小的,所以不如直接整合成一个类,让后面需要分类的对象继承
@Data
public class BasePageDto {
private Integer pageNum=1;
private Integer pageSize=20;
}
2、
然后创建具体的需要实现分页的类
这里继承BasePageDto对象后加了一条属性userName,这样就可以做到模糊查询用户名的同时分页,也就是说这个类里放条件
@Data
public class UserListPageDto extends BasePageDto {
// 用户名
private String userName;
}
3、
创建传输类
@Data
public class UserDto {
private String userId;
private String userName;
private String userPassword;
private Integer userFrozen;
private Integer userPublishArticle;
}
4、
构建返回类
此类作用为构建向前端返回的数据对象,包括页数、大小、总页数、总记录数和数据list
@Data public class CommonPage{ private Integer pageNumber; private Integer pageSize; private Integer totalPage; private Long total; private List list; public static CommonPage restPage(List list) { CommonPage result = new CommonPage (); Page pageInfo = new Page ().setRecords(list); result.setTotalPage((int) pageInfo.getPages()); result.setPageNumber((int) pageInfo.getCurrent()); result.setPageSize((int) pageInfo.getSize()); result.setTotal(pageInfo.getTotal()); result.setList(pageInfo.getRecords()); return result; } public static CommonPage restPage(IPage pageInfo) { CommonPage result = new CommonPage (); result.setTotalPage((int) pageInfo.getPages()); result.setPageNumber((int) pageInfo.getCurrent()); result.setPageSize((int) pageInfo.getSize()); result.setTotal(pageInfo.getTotal()); result.setList(pageInfo.getRecords()); return result; } }
5、
编写controller
这里默认按照MybatisPlus代码生成器的风格生成了dao层与service层
形式1:视图解析器模板:
@Resource
IUserService userService;
@Resource
@GetMapping("/list")
public String userList(@Valid UserListPageDto userListPageDto, Model model){
//步骤1、获取分页条件
Integer pageNum = userListPageDto.getPageNum();
Integer pageSize = userListPageDto.getPageSize();
String userName = userListPageDto.getUserName();
//步骤2:构建分页对象并添加条件
IPage userPage = new Page<>(pageNum,pageSize);
LambdaQueryWrapper userLambdaQueryWrapper = Wrappers.lambdaQuery().orderByDesc(User::getUserRegisterTime);
if (StrUtil.isNotBlank(userName)) {
userLambdaQueryWrapper.like(User::getUserName, userName);
model.addAttribute("userName", userName);
}
IPage userIPage = userService.page(userPage,userLambdaQueryWrapper);
//步骤3、返回
model.addAttribute("userPage", CommonPage.restPage(userIPage));
return "admin/userList";
}
形式2:返回json
Result类的构建可以参考我的上一篇博客Result模板
@Resource
IUserService userService;
@Resource
@GetMapping("/list")
public Result userList(@Valid UserListPageDto userListPageDto){
//步骤1、获取分页条件
Integer pageNum = userListPageDto.getPageNum();
Integer pageSize = userListPageDto.getPageSize();
String userName = userListPageDto.getUserName();
//步骤2:构建分页对象并添加条件
IPage userPage = new Page<>(pageNum,pageSize);
LambdaQueryWrapper userLambdaQueryWrapper = Wrappers.lambdaQuery().orderByDesc(User::getUserRegisterTime);
if (StrUtil.isNotBlank(userName)) {
userLambdaQueryWrapper.like(User::getUserName, userName);
model.addAttribute("userName", userName);
}
IPage userIPage = userService.page(userPage,userLambdaQueryWrapper);
//步骤3、返回
return CommonPage.restPage(userIPage);
}
附录:
service层与dao层
public interface UserMapper extends BaseMapper{ } public interface IUserService extends IService { } @Service public class UserServiceImpl extends ServiceImpl implements IUserService { }



