后端实现

  1. 引入PageHelper插件

    <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.3</version>
    </dependency>
    
  2. 添加PageModel实体类

    @Data
    @NoArgsConstructor
    public class PageModel {private Integer pageNum;private Integer pageSize;
    }
    

    这里的两个注解需要引入lombok插件才可以使用

  3. 在mapper文件中添加对数据库操作的方法

      <select id="findByPaging" resultMap="BaseResultMap" parameterType="map">select * from PARM_FUND_INFO order by cast(id as integer ) desc</select>
    

    **注意:**这里的by cast(id as integer)是因为我数据库的id字段是varchar类型,需要将其转换为integer才能进行排序

  4. 在dao层添加方法,调用上面的方法

    Page<FundInfo> findByPaging();
    
  5. 在service层以及service的实现类调用dao层的方法

    //service
    Page<FundInfo> findByPage(Integer pageNum, Integer pageSize);
    //serviceImpl
    @Overridepublic Page<FundInfo> findByPage(Integer pageNum, Integer pageSize) {PageHelper.startPage(pageNum,pageSize);Page<FundInfo> data=fundInfoMapper.findByPaging();return data;}
    

    **注意:**这里传入的pageNum是指要查询的页码,pageSize是指一页有多少条数据

  6. controller层调用

    @Autowiredprivate FundInfoService fundInfoService;
    ...@ApiOperation("分页测试")@PostMapping("/page")@CrossOriginpublic Result<List<FundInfo>> findByPaging(@RequestBody PageModel page) {int pageNum = page.getPageNum();int pageSize = page.getPageSize();Page<FundInfo> data = fundInfoService.findByPage(pageNum, pageSize);List<FundInfo> fundInfoList = data;Integer total = Math.toIntExact(data.getTotal());long startIndex = (pageNum - 1) * pageSize;if (total > startIndex) {return Result.buildResult(Result.Status.OK,fundInfoList,total);} else {return Result.buildResult(Result.Status.NOT_FOUND);}}
    

    这里因为angular对后端发起http请求的时候需要以对象的形式传参,所以后端在接收数据的时候定义了一个PageModel实体来接收前端发来的数据

    工具类Result可在我其他博客中找到,另外需要添加以下代码

    private Integer total;public Integer getTotal() {return total;}public void setTotal(Integer total) {this.total = total;}
    private Result(String status, String message, T data,Integer total) {this.status = status;this.message = message;this.data = data;this.total=total;}
    public static <T> Result<T> buildResult(Status status, T data,Integer total) {return new Result<T>(status.getCode(),status.getReason(),data,total);
    }

前端实现接收

由于我前端使用的是angular+primeng,所以可能对使用其他框架的朋友不太友好,这里主要也是提供一个思路。

  1. 在p-table中添加懒加载

  2. 由于在primeng中有分页器功能,即paginator,可以在p-table中设置[paginator]=true开启表的分页功能。如上所示的双向绑定first便是页码(数值为0,10,20…)

  3. 在ts文件中定义并初始化以下数据

    loading: boolean=true;
    first: number = 0;
    rows: number = 10;
    totalRecords: number;
    

    rows指的是table中一页有多少条内容,totalRecords则是一共有多少条内容。所以totalRecords/rows=一共有多少页,这这里不用我们做运算。赋值后table会自动计算。

  4. 定义懒加载的函数

    //懒加载分页的数据loadFundInfos(event: LazyLoadEvent) {this.loading = true;setTimeout(() => {this.fundService.getPage(this.first + 10,this.rows).then(response => { this.totalRecords = response.total; this.infos = response.data })this.loading = false;}, 500)}
    

    这里我调用服务,参数为:页码first+10,一页有多少条内容rows

  5. 服务对后端发起http请求

    page={pageNum:0,pageSize:0
    }
    url = "http://localhost:8081/";
    httpOptions = {headers: new HttpHeaders({ 'Content-Type': 'application/json' })}
    //获取分页后的信息getPage(pageNum: number, pageSize: number) {this.page.pageNum = pageNum / 10;this.page.pageSize = pageSize;return this.http.post<any>(this.url + "page", this.page, this.httpOptions).toPromise().then(response => { return response })}
    }
    

    这里我将获取到的参数以post请求方式访问后端

总结

后端分页没有什么难度,主要是前后端之间的传参比较麻烦,前端主要是传页码还有一页的大小给后端,后端接收后调用对应的方法后封装成JSON对象的形式返回给前端,前端通过定义变量对接收JSON对象的值,然后在html中调用对应的值就可以了。最后附上渲染获得的分页数据的部分代码,仅供参考。

<p-table [value]="infos" [paginator]="true" [(rows)]="rows" [(first)]="first" [(selection)]="selectedFundInfo"[(totalRecords)]="totalRecords" [lazy]="true" [(loading)]="loading" (onLazyLoad)="loadFundInfos($event)"><ng-template pTemplate="caption"><button pButton type="button" label="新增" icon="pi pi-plus" class="p-button-sm p-mr-1 p-ml-1"(click)="addOne()"></button><button pButton type="button" label="删除" icon="pi pi-trash" class="p-button-sm" [disabled]="isCheckBoxNotSelect"(click)="confirmDelLots()"></button></ng-template><ng-template pTemplate="header"><tr><th style="width: 60px;"></th><th>序号</th><th>基金代码</th><th>基金简称</th><th>基金全称</th><th>基金类型</th><th>基金类别</th><th>托管行</th><th>结算参与人编码</th><th>操作</th></tr></ng-template><ng-template pTemplate="body" let-info let-index="rowIndex"><tr><td><p-tableCheckbox [value]="info"></p-tableCheckbox></td><td>{{index+1}}</td><td>{{info.fundCode}}</td><td>{{info.fundName}}</td><td>{{info.fundFullName}}</td><td>{{info.fundCategory}}</td><td>{{info.fundType}}</td><td>{{info.custodianCode}}</td><td>{{info.settleParticipantNo}}</td><td><button pButton icon="pi pi-user-edit" class="p-button-sm p-mr-2" (click)="editFund(info)"></button><button pButton icon="pi pi-trash" class="p-button-sm" (click)="confirmDelOne(info)"></button></td></tr></ng-template><ng-template pTemplate="paginatorleft" let-state><button type="button" pButton icon="pi pi-refresh" label="首页" class="p-button-sm" (click)="reset()"></button></ng-template></p-table>

界面展示:

懒加载效果:

后端分页+前端分页显示(Angular+Primeng+SpringBoot)相关推荐

  1. 多条件模糊分页查询(angular+primeng+springboot)

    在实现了分页查询后,我原本的项目之前的模糊查询失效,之前是传一个封装好的实体对象给后端,后端通过这个对象查询后返回结果给到前端.由于实现了分页,所以查询得到的结果也需要分页. 有个很关键的问题是分页需 ...

  2. 后端传前端中文显示都是问好_前后端分离,后台返回的数据前端没法写,怎么办?...

    看到大家吊打后端,我来歪个楼. 首先,对于题主描述的 PHPer 吊打无疑,但并不是所有接口都可以随心所欲按照前端的要求来做,目前主要遇到几类接口: 1. 代理其他系统接口过来的(没法改底层,要转换需 ...

  3. MiniUI DataGrid 页面分页-前端分页

    作为一种前框开发脚本,Mini 目前已经到了3.0.对于Mini的使用,各类介绍也有不少,官网http://www.miniui.com/demo/ 也有不少介绍.但是具体到一些应用,总是有些差别. ...

  4. Angular+PrimeNg 分页器给后端传参分页

    Angular+PrimeNg 分页器给后端传参分页 文章目录 Angular+PrimeNg 分页器给后端传参分页 一.导入分页器 二.分页器显示 三.传输某页请求给后端 一.导入分页器 app.m ...

  5. 分页查询:前端分页和后端分页

    1.废话 因为一次查出所有的数据太耗时,网络传输量也大,所以分页. 后端分页: 查询出指定条数的数据,在SQL中使用limit    size, size * (num - 1)  起始条数 ,终止条 ...

  6. ajax前端分页实现

    本来不打算重复造轮子的,网上也已经有了很多关于前端分页的框架,插件等等,但是还是打算写出来是因为前段时间有一个功能模块需要用到前端分页,然后找了很多框架,以及插件,发现其内容非常的复杂或者有的干脆就是 ...

  7. #displaytag:一个简易的Java分页插件(无需其他的前端分页插件) @FDDLC

    一.话题引入: 在开发一个某某系统时,经常要用到分页. 比如PageHelper,它是后端分页插件,如果要在前端展示分页效果,要么自己编写前端的分页逻辑,要么再上一个前端分页插件. 而displayt ...

  8. angularjs实现的前端分页控件

    angularjs实现的前端分页控件 前言:之前写个一个jQuery的分页显示插件,http://blog.csdn.net/peakchen_90/article/details/52187175, ...

  9. 前后端数据交互|分页查询|表格-双向绑定|get和post的区别

    目录 1 前后端数据交互 1.1 前端代码 部署在 前端服务器 1.2 前端代码 在 浏览器展示(只展示页面,没有数据)----自给自足 1.3 前端/浏览器 请求 后端数据 (后端死数据)----给 ...

最新文章

  1. mysql用法之创建事件
  2. 2021年春季学期-信号与系统-第十三次作业参考答案-第六小题
  3. 动态多维数组在 VC 中的应用
  4. Sublime Text官方文档 中英文版本
  5. appium+python自动化项目实战(一):引入nose和allure框架
  6. Java读写CSV格式文件(opencsv)
  7. 力扣101. 对称二叉树(JavaScript)
  8. 【单片机基础篇】74HC595芯片详解
  9. This dependency was not found: * !!vue-style-loader!css-loader? 解决方案
  10. vue族谱架构_【Vue】谈Vue的依赖追踪系统 ——搞懂methods watch和compute的区别和联系...
  11. jiangdongsheng
  12. 计算机专业的具体能力和素质要求,浅谈中职计算机专业学生职业素养的要求
  13. Learning to Track at 100 FPS with Deep Regression Networks 论文笔记
  14. Fluent——UDF监测指定点的物理量
  15. 一个C#开发者学习SpringCloud搭建微服务的心路历程
  16. 网络钓鱼攻击技术分析及防范
  17. 适合学生写的请假管理系统
  18. jupyter的安装步骤
  19. Word中更新图表所有的域
  20. 数据结构与算法一览(树、图、排序算法、搜索算法等)- Review

热门文章

  1. JavaScript之BOM和DOM入门
  2. 华为云提供“多云灾备”三大方案,为云上业务无中断保驾护航
  3. 美赛资源查找指南(内含看英文文献翻译利器)
  4. 《捕鱼达人3》主程洪志雄专访:引擎3D功能重大突破与创新
  5. 会自动化—10K,能做自动化—20K,你搞懂自动化测试没有?
  6. iOS 获取App的ipa包以及资源文件
  7. 小程序黑内幕,我陷入了沉思
  8. 淮阴工学院计算机专业历年录取分数线,淮阴工学院录取分数线2021是多少分(附历年录取分数线)...
  9. 微信公众号简单开发(2)验证服务器地址
  10. RGBD融合原理及实践