一、创建分页对象
1.1 PageDTO1.2 PageVO 二、创建测试对象
2.1 user表2.2 User实体类2.3 UserDTO2.4 UserVO 三、测试
3.1 业务层3.2 控制器(Servlet)3.3 测试数据和结果
一、创建分页对象 1.1 PageDTO参考博文:一个基础的SpringBoot项目该包含哪些
public class PageDTO1.2 PageVO> { private Integer currPage; private Integer pageSize; private String pageDataKey; public PageDTO() { } public PageDTO(Integer currPage, Integer pageSize, String pageDataKey) { this.currPage = currPage; this.pageSize = pageSize; this.pageDataKey = pageDataKey; } public PageDTO(Integer currPage, Integer pageSize) { this.currPage = currPage; this.pageSize = pageSize; } @SuppressWarnings("unchecked") public T calcCurrPage() { // 起始页码 = (当前页码 - 1) * 每页数据数量 currPage = (currPage - 1) * pageSize; // 直接返回泛型对应的对象 return (T) this; } public Integer getCurrPage() { return currPage; } public void setCurrPage(Integer currPage) { this.currPage = currPage; } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public String getPageDataKey() { return pageDataKey; } public void setPageDataKey(String pageDataKey) { this.pageDataKey = pageDataKey; } @Override public String toString() { return "PageDTO{" + "currPage=" + currPage + ", pageSize=" + pageSize + ", pageDataKey='" + pageDataKey + ''' + '}'; } }
@JsonInclude(JsonInclude.Include.NON_NULL) public class PageVO二、创建测试对象 2.1 user表{ private Integer currPage; private Integer pageSize; private Integer totalPage; private Integer totalCount; private List pageDataList; public PageVO() { } public PageVO setCurrAndSize(PageDTO> pageDTO) { // 将dto中当前页码和每页数量设置为vo对对应成员变量,也可以使用BeanUtils实现 this.setCurrPage(pageDTO.getCurrPage()); this.setPageSize(pageDTO.getPageSize()); return this; } public void setTotalPageAndCount(Integer totalCount) { // 计算总页码 int totalPage = totalCount / pageSize + (totalCount % pageSize == 0 ? 0 : 1); // 设置总页码和总记录数 this.setTotalCount(totalCount); this.setTotalPage(totalPage); } public Integer getCurPage() { return currPage; } public void setCurrPage(Integer currPage) { this.currPage = currPage; } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public Integer getTotalPage() { return totalPage; } public void setTotalPage(Integer totalPage) { this.totalPage = totalPage; } public Integer getTotalCount() { return totalCount; } public void setTotalCount(Integer totalCount) { this.totalCount = totalCount; } public List getPageDataList() { return pageDataList; } public void setPageDataList(List pageDataList) { this.pageDataList = pageDataList; } @Override public String toString() { return "PageVO{" + "curPage=" + currPage + ", pageSize=" + pageSize + ", totalPage=" + totalPage + ", totalCount=" + totalCount + ", pageDataList=" + pageDataList + '}'; } }
DROp TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`user_id` INT UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT COMMENT '用户编号-主键',
`user_name` VARCHAR(20) NOT NULL COMMENT '用户名',
`gender` TINYINT UNSIGNED DEFAULT 1 COMMENT '性别,1-男;0-女',
`phone` VARCHAR(12) NOT NULL UNIQUE COMMENT '手机号',
PRIMARY KEY(`user_id`)
)ENGINE = INNODB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 101 COMMENT '用户表';
INSERT INTO `user`(`user_name`, `gender`, `phone`)
VALUES('张三', 1, '12345678901'),
('李四', 0, '14345678901'),
('王五', 1, '15345678901'),
('赵六', 0, '17345678901');
2.2 User实体类
public class User {
private Integer userId;
private String userName;
private Integer gender;
private String phone;
public User() {
}
public User(Integer userId, String userName, Integer gender, String phone) {
this.userId = userId;
this.userName = userName;
this.gender = gender;
this.phone = phone;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Integer getGender() {
return gender;
}
public void setGender(Integer gender) {
this.gender = gender;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + ''' +
", gender=" + gender +
", phone='" + phone + ''' +
'}';
}
}
2.3 UserDTO
public class UserDTO extends PageDTO2.4 UserVO{ private Integer userId; private String phone; public UserDTO() { } public UserDTO(Integer userId, String phone) { this.userId = userId; this.phone = phone; } public UserDTO(Integer currPage, Integer pageSize, String pageDataKey, Integer userId, String phone) { super(currPage, pageSize, pageDataKey); this.userId = userId; this.phone = phone; } public UserDTO(Integer currPage, Integer pageSize, Integer userId, String phone) { super(currPage, pageSize); this.userId = userId; this.phone = phone; } public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } @Override public String toString() { return "UserDTO{" + "userId=" + userId + ", phone='" + phone + ''' + '}'; } }
public class UserVO {
private Integer userId;
private String userName;
private String gender;
private String phone;
public UserVO() {
}
public UserVO(Integer userId, String userName, String gender, String phone) {
this.userId = userId;
this.userName = userName;
this.gender = gender;
this.phone = phone;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "UserVO{" +
"userId=" + userId +
", userName='" + userName + ''' +
", gender='" + gender + ''' +
", phone='" + phone + ''' +
'}';
}
}
三、测试
3.1 业务层PS:持久层略
public class UserServiceImpl implements UserService {
private final UserDao userDao = new UserDaoImpl();
@Override
public PageVO listPageUsersInfo(UserDTO userDTO) {
// 创建一个分页VO,同时设置当前页码和每页数量
PageVO pageVO = new PageVO().setCurrAndSize(userDTO);
// 更新当前页码,方便数据库查询
userDTO = userDTO.calcCurrPage();
// 查询分页数据
List users = userDao.listPageUsers(userDTO.getCurrPage(), userDTO.getPageSize());
// 判断是否获取成功
if (null == users) {
return null;
}
// 存储vo集合
List userVOList = new ArrayList<>();
// 将实体集合转成VO集合
for (User u : users) {
UserVO userVO = new UserVO();
// 也可以使用BeanUtils工具类
userVO.setUserId(u.getUserId());
userVO.setUserName(u.getUserName());
userVO.setGender(u.getGender() == 1 ? "男" : "女");
userVO.setPhone(u.getPhone());
// 存入集合
userVOList.add(userVO);
}
// 设置分页数据
pageVO.setPageDataList(userVOList);
// 查询总记录数
int totalCount = userDao.countAll();
// 设置总记录数和总页码
pageVO.setTotalPageAndCount(totalCount);
return pageVO;
}
}
3.2 控制器(Servlet)
@WebServlet("/user/pageUsers")
public class UserServlet extends HttpServlet {
private final UserService userService = new UserServiceImpl();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 设置请求编码方式
req.setCharacterEncoding("utf-8");
// 设置响应数据格式和编码方式
resp.setContentType("application/json;charset=utf-8");
// 根据请求对象request中请求体转成对象
UserDTO userDTO = JsonUtils.getObjectFromReqBody(req, UserDTO.class);
// 调用service方法,获取分页对象
PageVO pageVO = userService.listPageUsersInfo(userDTO);
// 创建响应对象
ResultInfo> resultInfo =
new ResultInfo<>(200, "请求成功", pageVO);
// 将对象转成json字符串
String resJson = JsonUtils.getJsonFromObject(resultInfo);
// 判断是否转化成功
if (null != resJson) {
// 响应数据
resp.getWriter().write(resJson);
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
}
3.3 测试数据和结果
测试数据
测试结果/响应结果PS: 这里的用户id和手机号没用到,就随便写了
测试源码地址
github:https://github.com/keyhuy/paging-test码云:https://gitee.com/keyhuy/paging-test



