栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot项目04之实现分页功能

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot项目04之实现分页功能

1.准备工作

为了演示分页效果,首先需要导入大量数据才能体现分页功能的作用;所以,第一步需要导入数据,实验所需的SQL脚本内容较多,这里就不一一展示,其导入后效果如下图。

sql脚本下载地址为:sql下载地址

2.实现分页功能

分页功能的交互流程是前端将所需页码page和每页展示条数limit两个参数传输给后端,而后端在接受到分页请求后会对分页参数进行处理并计算出需要查询的是从第几条数据到第几条数据,然后利用MySQL的limit关键字去查询对应的记录并返回给前端。

2.1 新建实体类和Mapper接口

在entity包下创建AdminUser,java。在Dao包下创建AdminUserDao.java。
AdminUser.java

@Data
public class AdminUser implements Serializable {
    private Long id;
    private String userName;
    private String password;
    private String userToken;
    private int isDeleted;

    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createTime;
}

AdminUserDao.java

@Mapper
public interface AdminUserDao {

    // 查询用户列表
    List findAdminUsers(Map param);

    // 查询用户总数
    int getTotalAdminUser(Map param);
}
2.2 创建Mapper接口的映射文件

在resources/mapper目录下新建Mapper接口的映射文件AdminUserDao.xml,之后进行映射文件的编写。
AdminUserDao.xml





    
        
        
        
        
        
        
    

    
    

    
     

2.3 创建分页工具类

分页结果需要使用一个对象返回给前端,所以这里需要一个包装类对结果进行包装。新建一个utils包,然后在该包下新建PageResult.java。
PageResult.java

@Data
public class PageResult implements Serializable {
    // 总记录数
    private int totalCount;
    // 每页记录数
    private int pageSize;
    // 总页数
    private int totalPage;
    // 当前页数
    private int currPage;
    // 列表数据
    private List list;
    // 分页结果
    public PageResult(List list, int totalCount, int pageSize, int currPage){
        this.list = list;
        this.totalCount = totalCount;
        this.pageSize = pageSize;
        this.currPage = currPage;
        this.totalPage = (int)Math.ceil((double)totalCount/pageSize);
    }
}

同样,前端传过来的数据与后端中书写sql语句需要的数据不一致,所以需要一个包装类进行包装,在utils包下新建PageUtil.java。
PageUtil.java

@Data
public class PageUtil extends LinkedHashMap {
    // 当前页码
    private int page;
    // 每页条数
    private int limit;

    public PageUtil(Map params){
        this.putAll(params);

        // 分页参数
        this.page = Integer.parseInt(params.get("page").toString());
        this.limit = Integer.parseInt(params.get("limit").toString());

        this.put("start", (page -1) * limit);
        this.put("page", page);
        this.put("limit", limit);
    }
}
2.4 创建Service接口及其实现类

创建service包并在该包下创建AdminUserService.java以及实现类。

public interface AdminUserService {
    // 分页功能
    PageResult getAdminUserPage(PageUtil pageUtil);
}

@Service("adminUserService")
public class AdminUserServiceImpl implements AdminUserService {
    @Autowired
    private AdminUserDao adminUserDao;

    @Override
    public PageResult getAdminUserPage(PageUtil pageUtil){
        List users = adminUserDao.findAdminUsers(pageUtil);
        int total = adminUserDao.getTotalAdminUser(pageUtil);
        PageResult pageResult = new PageResult(users, total, pageUtil.getLimit(), pageUtil.getPage());
        return pageResult;
    }
}
2.5 创建控制器

AdminUserControler.java

@RestController
@RequestMapping("/fenye")
public class AdminUserController {

    @Autowired
    private AdminUserService adminUserService;

    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public PageResult list(@RequestParam Map params) {
        if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) {
            return null;
        }
        //查询列表数据
        PageUtil pageUtil = new PageUtil(params);
        return adminUserService.getAdminUserPage(pageUtil);
    }

}
2.6 测试分页效果

http://localhost:8080/bbs/fenye/list?page=1&limit=10

http://localhost:8080/bbs/fenye/list?page=3&limit=10

可以看到,基本完成了分页功能;实际上,可以使用插件完成该功能,并不需要自己来实现这个功能。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873899.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号