我的笔记会更新至我的hexo博客,欢迎访问
BDsnake’s Blog
代码模板:Mybatis-Plus分页
每次写分页都很烦,记录一下实现分页查询的全过程,以后想写分页可以直接改模板
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;
/**
* 是否冻结,0正常,1冻结(冻结后无法登陆)
*/
private Integer userFrozen;
/**
* 是否可以发布文章 0不能,1可以发布
*/
private Integer userPublishArticle;
}
4、
构建返回类
此类作用为构建向前端返回的数据对象,包括页数、大小、总页数、总记录数和数据list
@Data
public class CommonPage<T> {
private Integer pageNumber;
private Integer pageSize;
private Integer totalPage;
private Long total;
private List<T> list;
/**
* 将PageHelper分页后的list转为分页信息
*/
public static <T> CommonPage<T> restPage(List<T> list) {
CommonPage<T> result = new CommonPage<T>();
Page<T> pageInfo = new Page<T>().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;
}
/**
* 将SpringData分页后的list转为分页信息
*/
public static <T> CommonPage<T> restPage(IPage<T> pageInfo) {
CommonPage<T> result = new CommonPage<T>();
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<User> userPage = new Page<>(pageNum,pageSize);
LambdaQueryWrapper<User> userLambdaQueryWrapper = Wrappers.<User>lambdaQuery().orderByDesc(User::getUserRegisterTime);
if (StrUtil.isNotBlank(userName)) {
userLambdaQueryWrapper.like(User::getUserName, userName);
model.addAttribute("userName", userName);
}
IPage<User> 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<User> userPage = new Page<>(pageNum,pageSize);
LambdaQueryWrapper<User> userLambdaQueryWrapper = Wrappers.<User>lambdaQuery().orderByDesc(User::getUserRegisterTime);
if (StrUtil.isNotBlank(userName)) {
userLambdaQueryWrapper.like(User::getUserName, userName);
model.addAttribute("userName", userName);
}
IPage<User> userIPage = userService.page(userPage,userLambdaQueryWrapper);
//步骤3、返回
return CommonPage.restPage(userIPage);
}
附录:
service层与dao层
public interface UserMapper extends BaseMapper<User> {
}
public interface IUserService extends IService<User> {
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
}