文章目录
参考博文👀:一个基础的SpringBoot项目该包含哪些
一、创建分页对象
1.1 PageDTO
public class PageDTO<T extends PageDTO<?>> {
/**
* 当前页码
*/
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;
}
/**
* 修改当前页码为当前页的起始页码,方便数据库查询
* - 将this强转成泛型T会产生警告,添加@SuppressWarning注解可以抑制编译器产生警告
*/
@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 + '\'' +
'}';
}
}
1.2 PageVO
@JsonInclude(JsonInclude.Include.NON_NULL)
public class PageVO<T> {
/**
* 当前页码
*/
private Integer currPage;
/**
* 每页显示数量
*/
private Integer pageSize;
/**
* 总页码
*/
private Integer totalPage;
/**
* 总记录数
*/
private Integer totalCount;
/**
* 每页显示的数据
*/
private List<T> pageDataList;
public PageVO() {
}
/**
* 通过分页dto设置vo的当前页码和每页数量
*/
public PageVO<T> 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<T> getPageDataList() {
return pageDataList;
}
public void setPageDataList(List<T> pageDataList) {
this.pageDataList = pageDataList;
}
@Override
public String toString() {
return "PageVO{" +
"curPage=" + currPage +
", pageSize=" + pageSize +
", totalPage=" + totalPage +
", totalCount=" + totalCount +
", pageDataList=" + pageDataList +
'}';
}
}
二、创建测试对象
2.1 user表
/* 建表 */
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 PageDTO<UserDTO> {
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 + '\'' +
'}';
}
}
2.4 UserVO
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 + '\'' +
'}';
}
}
三、测试
PS:持久层略
3.1 业务层
public class UserServiceImpl implements UserService {
private final UserDao userDao = new UserDaoImpl();
/**
* 分页查询用户信息
*/
@Override
public PageVO<UserVO> listPageUsersInfo(UserDTO userDTO) {
// 创建一个分页VO,同时设置当前页码和每页数量
PageVO<UserVO> pageVO = new PageVO<UserVO>().setCurrAndSize(userDTO);
// 更新当前页码,方便数据库查询
userDTO = userDTO.calcCurrPage();
// 查询分页数据
List<User> users = userDao.listPageUsers(userDTO.getCurrPage(), userDTO.getPageSize());
// 判断是否获取成功
if (null == users) {
return null;
}
// 存储vo集合
List<UserVO> 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<UserVO> pageVO = userService.listPageUsersInfo(userDTO);
// 创建响应对象
ResultInfo<PageVO<UserVO>> 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和手机号没用到,就随便写了
- 测试结果/响应结果
测试源码地址