当前位置:   article > 正文

JAVA分页查询实现_java分页查询代码

java分页查询代码

1 通用分业数据存储类

实现两个通用的类,PageResult<T>用来封装查询结果,QueryObject用来为Mybatis(-plus)的SQL语句中LIMIT赋值,实现分页查询

  1. @Data
  2. public class PageResult<T> {
  3. // 用户输入的两个参数
  4. private int currentPage; // 当前页码
  5. private int pageSize; // 每页显示的条数
  6. // 两条 SQL 语句执行的结果
  7. private int totalCount; // 总条数
  8. private List<T> data; // 当前页结果集数据
  9. // 三个程序计算的数据
  10. private int prevPage; // 上一页页码
  11. private int nextPage; // 下一页页码
  12. private int totalPage; // 总页数/末页页码
  13. // 分页数据通过下面构造器封装好
  14. public PageResult(int currentPage, int pageSize, int totalCount, List<T>
  15. data) {
  16. this.currentPage = currentPage;
  17. this.pageSize = pageSize;
  18. this.totalCount = totalCount;
  19. this.data = data;
  20. // 计算三个数据的算法
  21. this.totalPage = totalCount % pageSize == 0 ? totalCount / pageSize :
  22. totalCount / pageSize + 1;
  23. this.prevPage = currentPage - 1 >= 1 ? currentPage - 1 : 1;
  24. this.nextPage = currentPage + 1 <= this.totalPage ? currentPage + 1 :
  25. this.totalPage;
  26. }
  27. }

//当前的所有数据能按页面大小分几页,如果totalCount % pageSize能整除(如4 % 2)那就是分两页;不能整除那就加一再除,所以肯定有一种能整除

this.totalPage = totalCount % pageSize == 0 ? totalCount / pageSize :totalCount / pageSize + 1;

//前一页是否还存在
this.prevPage = currentPage - 1 >= 1 ? currentPage - 1 : 1;

//后一页是否还存在
this.nextPage = currentPage + 1 <= this.totalPage ? currentPage + 1 :this.totalPage;

  1. @Data
  2. public class QueryObject {
  3. private int currentPage = 1; // 当前页码,要跳转到哪一页的页码
  4. private int pageSize = 3; // 每页显示条数
  5. private int start = 0; //SQL中LIMIT {start},{pageSize}
  6. public QueryObject(int currentPage,int pageSize){
  7. this.currentPage = currentPage;
  8. this.pageSize = pageSize;
  9. this.start = (this.currentPage - 1) * pageSize;
  10. }
  11. }

数据库中有四条测试数据:

 用LIMIT来模拟一下:

LIMIT 0,2 ==>从第一页开始【start = (currentPage - 1) * pageSize,start = 0,currentPage =1】,每业数据SIZE大小为2

 LIMIT 2,2 ==>跳转到第二页

 2 DAO 接口与Mapper文件实现

1)UserDao.java

跟分页查询相关的参数主要是这两个@Param("start") int start,@Param("pageSize") int pageSize,前面的其他参数是通用查询条件,可以不加。

  1. @Mapper
  2. public interface UserDao {
  3. ......
  4. /**
  5. * 分页查询
  6. * @return
  7. */
  8. List<SysUser> getUserListByPage(@Param("userName")String userName,@Param("phone")String phone,@Param("email")String email, @Param("start") int start,@Param("pageSize") int pageSize);
  9. }
  10. ......
  11. }

 2)UserMapper.xml

<where>就是其他参数的查询条件,LIMIT才是跟分页查询相关的,所以<where>部分跟DAO文件对应起来,可以一起加也可以一起不加。

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.lhc.lhcprojectdemo.dao.UserDao">
  4. ......
  5. <select id="getUserListByPage" resultType="com.lhc.lhcprojectdemo.util.entity.user.SysUser">
  6. SELECT user_name,nick_name,phone,email,status,create_time,update_time
  7. FROM sys_user
  8. <where>
  9. <if test="userName != null and userName != ''">
  10. user_name like concat('%', #{userName}, '%')
  11. </if>
  12. <if test="phone != null and phone != ''">
  13. AND
  14. phone like concat('%', #{phone}, '%')
  15. </if>
  16. <if test="email != null and email != ''">
  17. AND
  18. email like concat('%', #{email}, '%')
  19. </if>
  20. </where>
  21. LIMIT #{start}, #{pageSize}
  22. </select>
  23. ......
  24. </mapper>

3 Service类

service类主要是接收control端传来的数据,调用model层去查询数据。

  1. @Service
  2. public class UserServiceImpl implements UserService {
  3. @Override
  4. public PageResult<SysUser> getUserListByPage(String userName, String phone, String email,QueryObject qo){
  5. // 调用 DAO 查询数据数量
  6. int totalCount = userDao.getUserCount();
  7. // 为了性能加入判断,若查询的数据数量为 0,说明没有数据,返回返回空集合
  8. if(totalCount == 0){
  9. return new PageResult(qo.getCurrentPage(), qo.getPageSize(),
  10. totalCount, Collections.emptyList());
  11. }
  12. // 执行到这里代表有数据,查询当前页的结果数据
  13. List<SysUser> users = userDao.getUserListByPage(userName,phone,email,qo.getStart(), qo.getPageSize());
  14. return new PageResult(qo.getCurrentPage(), qo.getPageSize(), totalCount, users);
  15. }
  16. }

4 control层

control层简单实现一下,获取参数并处理。

  1. @GetMapping("/list")
  2. @ResponseBody
  3. @PreAuthorize("hasAnyAuthority('user:list')")
  4. public String userList( @RequestParam(value = "query",required = false)String query, @RequestParam("pagenum") int pagenum,@RequestParam("pagesize") int pagesize){
  5. QueryObject qo = new QueryObject(pagenum,pagesize);
  6. //其他请求参数处理,偷个懒一个query解决
  7. String usernmae = "";
  8. String phone = "";
  9. String email = "";
  10. ......
  11. // 调用业务层方法来处理请求查询某一页数据
  12. PageResult<SysUser> pageResult = userService.getUserListByPage(usernmae,phone,email,qo);
  13. Map<String, Object> map = new HashMap<>(2);
  14. map.put("data",pageResult);
  15. map.put("meta", ResultUtil.ok().message("获取成功").status(200));
  16. return JSON.toJSONString(map);
  17. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/53926
推荐阅读
相关标签
  

闽ICP备14008679号