对webmvc分页和排序的支持(非常实用)
- 格式:pdf
- 大小:824.10 KB
- 文档页数:9
前端开发中的数据分页与加载优化随着互联网的快速发展,前端开发在网站和应用的设计中扮演着重要的角色。
数据分页与加载优化是前端开发中一个关键的问题,它对于提供良好的用户体验以及减轻服务器负载都至关重要。
本文将探讨前端开发中的数据分页与加载优化的方法和技巧。
一、数据分页在前端开发中,分页是一种常见的数据处理方式。
当我们需要加载大量的数据时,为了避免页面卡顿和加载时间过长,我们可以将数据分成多个页面,按需加载。
下面是一些常见的数据分页的方法和注意事项。
1.1 分页组件前端框架中通常都有提供分页组件,可以根据需要选择相应的组件,并根据页面布局和样式进行定制。
分页组件可以方便地实现数据的分页和展示,并提供良好的用户交互体验。
1.2 后端接口设计在前端开发中,数据的分页是依赖后端接口的支持的。
因此,在设计后端接口时,需要考虑数据的分页逻辑。
通常使用的方式是通过参数传递页码和每页数据量,后端接口根据这些参数返回相应的数据。
1.3 数据加载方式在进行数据分页时,需要考虑数据的加载方式。
常见的数据加载方式有两种:前端加载和后端加载。
前端加载是指将所有数据一次性加载到前端,通过分页组件实现数据的分页展示。
这种方式能够提供更快的用户体验,但可能会导致浏览器负载过大,对于大数据量的情况不太适用。
后端加载是指每次只加载当前页数据,通过后端接口进行数据的分页。
这种方式可以减轻前端的负载,但可能会导致用户等待时间过长,对于网络较慢的情况可能影响用户体验。
根据实际情况选择适合的数据加载方式是很重要的,可以根据数据量大小、用户需求和网络条件进行权衡。
二、数据加载优化除了分页,数据加载优化也是前端开发中的一个重要问题。
优化数据加载可以提高页面加载速度,减轻服务器负载,从而提升用户体验。
下面是一些常见的数据加载优化方法和技巧。
2.1 懒加载懒加载是一种加载优化的方式,它的原理是在页面滚动到对应位置时再加载相关数据。
这种方式可以减少初次加载的数据量,提高页面加载速度。
web设计试题及答案一、单项选择题(每题2分,共10分)1. 以下哪个不是Web设计中常用的布局方式?A. 栅格布局B. 流式布局C. 框架布局D. 弹性布局答案:C2. CSS选择器中,以下哪个用于选择ID为“header”的元素?A. #headerB. .headerC. headerD. [id="header"]答案:A3. HTML5中,用于定义导航链接的部分是:A. <nav>B. <section>C. <article>D. <aside>答案:A4. 在Web设计中,响应式设计的目的是什么?A. 增加网站加载速度B. 优化网站在不同设备上的显示效果C. 提高网站安全性D. 增加网站内容量答案:B5. 下列哪个属性用于设置图片的宽度?A. widthB. heightC. altD. src答案:A二、多项选择题(每题3分,共15分)1. 以下哪些是Web设计中常用的字体样式?A. 字体大小(font-size)B. 字体颜色(color)C. 字体类型(font-family)D. 字体粗细(font-weight)答案:ABCD2. 在Web设计中,以下哪些是有效的HTML标签?A. <p>B. <img>C. <table>D. <ul>答案:ABCD3. 以下哪些是CSS中用于定位元素的方法?A. staticB. relativeC. absoluteD. fixed答案:ABCD4. 在Web设计中,以下哪些是提升用户体验的因素?A. 清晰的导航B. 快速的加载时间C. 良好的兼容性D. 丰富的内容答案:ABCD5. 以下哪些是Web设计中常用的交互元素?A. 按钮(button)B. 链接(a)C. 图片(img)D. 输入框(input)答案:ABD三、简答题(每题5分,共20分)1. 请简述Web设计中的“三栏布局”是什么,并说明其特点。
使用前端框架实现分页导航的方法在现代的网页设计中,分页导航被广泛应用于展示大量内容的页面,为用户提供方便快捷的浏览方式。
使用前端框架可以轻松地实现分页导航,并且提供了丰富的功能和样式定制选项。
本文将介绍常用的前端框架中实现分页导航的方法,并提供一些最佳实践。
一、Bootstrap框架Bootstrap是一款开源的前端框架,提供了丰富的组件和样式,广泛应用于网页设计和开发中。
要使用Bootstrap实现分页导航,首先需要引入Bootstrap的CSS和JS文件。
然后,在HTML中使用Navbar组件来创建导航栏,并使用Pagination组件来创建分页器。
Navbar组件可以通过简单的HTML代码创建一个固定的页眉导航栏,其中可以包含Logo、链接、表单等元素。
通过定制样式和布局,可以实现个性化的导航栏设计。
Pagination组件可以通过添加ul和li元素来创建一个分页器。
使用class="pagination"可以确保样式和功能的一致性。
通过调整样式和使用JavaScript来处理点击事件,可以实现分页导航的各种效果,例如ajax加载更多内容、跳转到指定页等。
二、Vue.js框架Vue.js是一款轻量级、灵活且易于上手的JavaScript框架,用于构建用户界面。
要使用Vue.js实现分页导航,首先需要引入Vue.js的文件。
然后,在HTML中定义一个Vue实例,并使用v-for指令来循环生成分页导航的链接。
在Vue实例中,可以使用v-model指令来绑定当前页数的数据,并通过计算属性来获得总页数。
然后,可以使用v-bind指令来动态绑定分页导航链接的样式和是否可点击的状态。
最后,通过使用v-on指令来绑定点击事件,以实现分页导航的功能。
Vue.js还提供了许多可用于扩展和定制的插件,如Vue Router用于处理路由导航,Vuex用于管理应用程序的状态等。
这些工具可以进一步增强分页导航的功能和性能。
一、介绍restful apirestful api是一种基于网络协议协议设计的web api,它以资源为中心,通过网络协议的get、post、delete、put等方法来对资源进行操作。
restful api具有统一的接口和无状态的特点,便于开发者进行调用和使用。
二、分页排序的必要性在实际开发中,很多api接口需要支持分页和排序功能。
比如在一个电商全球信息站中,商品列表的接口通常需要支持分页查看,并且可以按照价格、销量、上架时间等多种条件进行排序。
在用户量比较大的情况下,没有分页和排序功能将导致数据量过大,影响接口性能和用户体验。
三、分页排序的常见参数1. 分页参数- page:表示当前的页数- size:表示每页显示的数据条数2. 排序参数- sort:表示排序的字段- order:表示排序的顺序,可以是升序(asc)或降序(desc)四、 restful api通用分页排序参数的设计为了实现通用的分页排序功能,可以在restful api中设计一组统一的分页排序参数。
具体设计如下:1. 分页参数- page:表示当前的页数,取值大于等于1- size:表示每页显示的数据条数,取值大于等于1,小于等于1002. 排序参数- sort:表示排序的字段,可以是多个字段,以逗号分隔- order:表示排序的顺序,可以是升序(asc)或降序(desc),对应sort中对应字段的排序顺序五、 restful api通用分页排序参数的使用示例1. 分页功能的使用示例- 请求url:/api/products- 请求参数:page=1size=10- 返回结果:返回第一页的10条商品数据2. 排序功能的使用示例- 请求url:/api/products- 请求参数:sort=price,stockorder=desc,asc- 返回结果:按照价格降序、库存升序的顺序返回商品数据六、总结通过设计通用的分页排序参数,restful api可以更好地支持分页和排序功能,提高接口的通用性和灵活性,满足不同场景下的分页排序需求。
mvc pagedlistpager 参数MVC中的PagedListPager是一个用于分页显示数据的类,它可以帮助我们更好地管理大量数据。
在MVC应用程序中使用PagedListPager 时,需要传递一些参数以实现分页功能。
以下是一些常见的PagedListPager参数:1. CurrentPage:当前页码,用于指定要显示的页数。
例如,如果当前页码为2,则显示第2页的数据。
2. PageSize:每页显示的记录数。
通过设置PageSize,我们可以控制每页显示的数据量。
3. TotalRecords:总记录数。
这个参数表示数据表中的总记录数,以便PagedListPager能够正确地计算分页信息。
4. SortExpression:排序字段。
用于指定对数据进行排序的字段。
例如,如果我们需要按照“名称”字段进行升序排序,可以设置SortExpression 为“名称”。
5. SortDirection:排序方向。
取值为Ascending(升序)或Descending (降序)。
用于指定排序字段的顺序。
6. FilterExpression:过滤表达式。
用于筛选数据。
例如,如果我们需要筛选出“状态”为“激活”的记录,可以设置FilterExpression为“状态='激活'”。
7. Query:查询语句。
用于获取指定条件的数据。
这个参数可以根据需要自定义查询语句。
8. DataSource:数据源。
用于指定数据来源。
通常为Entity Framework 或其他数据访问库。
在MVC应用程序中使用PagedListPager时,需要根据实际需求设置这些参数,以便正确地分页显示数据。
以下是一个简单的示例:```csharppublic ActionResult Index(){int currentPage = Request.QueryString["currentPage"];int pageSize = Request.QueryString["pageSize"];string sortExpression = Request.QueryString["sortExpression"];string filterExpression = Request.QueryString["filterExpression"];// 初始化数据源IQueryable<MyEntity> dataSource = new MyEntityRepository().GetEntities();// 根据参数设置分页和排序var pagedData = dataSource.OrderBy(sortExpression, SortDirection.Ascending).Where(filterExpression).ToPagedList(currentPage, pageSize);// 返回视图return View(pagedData);}```在视图中,我们可以使用以下代码显示分页控件和数据:```html@using Microsoft.AspNetCore.Mvc.Rendering@model IEnumerable<MyEntity><table>@foreach (var item in Model){<tr><td>@</td><!--的其他字段--></tr>}</table>@Html.PagedListPager(Model, pageSize: 10, currentPage: 2)```以上代码示例中,我们使用了ToPagedList方法将数据源转换为分页数据,并设置了分页控件。
JavaWeb实现分页的四种⽅法⼀.借助数组进⾏分页原理:进⾏数据库查询操作时,获取到数据库中所有满⾜条件的记录,保存在应⽤的临时数组中,再通过List的subList⽅法,获取到满⾜条件的所有记录。
实现:⾸先在dao层,创建StudentMapper接⼝,⽤于对数据库的操作。
在接⼝中定义通过数组分页的查询⽅法,如下所⽰:1 List<Student> queryStudentsByArray();⽅法很简单,就是获取所有的数据,通过list接收后进⾏分页操作。
创建StudentMapper.xml⽂件,编写查询的sql语句:1 <select id="queryStudentsByArray" resultMap="studentmapper">2 select * from student3 </select>可以看出再编写sql语句的时候,我们并没有作任何分页的相关操作。
这⾥是查询到所有的学⽣信息。
接下来在service层获取数据并且进⾏分页实现:定义IStuService接⼝,并且定义分页⽅法: List<Student> queryStudentsByArray(int currPage, int pageSize);通过接收currPage参数表⽰显⽰第⼏页的数据,pageSize表⽰每页显⽰的数据条数。
创建IStuService接⼝实现类StuServiceIml对⽅法进⾏实现,对获取到的数组通过currPage和pageSize进⾏分页:1@Override2public List<Student> queryStudentsByArray(int currPage, int pageSize) {3 List<Student> students = studentMapper.queryStudentsByArray();4// 从第⼏条数据开始5int firstIndex = (currPage - 1) * pageSize;6// 到第⼏条数据结束7int lastIndex = currPage * pageSize;8return students.subList(firstIndex, lastIndex);9 }通过subList⽅法,获取到两个索引间的所有数据。
前端框架中的表格排序与筛选技巧在前端开发中,表格是页面常见的数据展示方式之一。
为了让用户更方便地浏览和查找数据,表格的排序和筛选功能非常重要。
在使用前端框架进行开发时,可以借助框架提供的 API 和组件,快速实现表格的排序和筛选功能。
本文将介绍几种常用的前端框架中的表格排序与筛选技巧。
一、排序技巧1. 列头点击排序:在表格中,通常会给列头添加一个排序的图标,表示该列是否处于升序或降序的状态。
当用户点击列头时,可以通过监听事件,在前端框架中实现表格数据的排序。
具体实现方式如下:```// HTML<th @click="sortBy('columnName')">Column Name<i v-show="sortKey === 'columnName'" :class="sortOrders[columnName] === 1 ? 'fa fa-caret-down' : 'fa fa-caret-up'"></i></th>// JavaScriptsortBy(columnName) {this.sortKey = columnName;this.sortOrders[columnName] = this.sortOrders[columnName] * -1;this.tableData.sort((a, b) => {return a[columnName].localeCompare(b[columnName]) *this.sortOrders[columnName];});}```以上代码在点击列头时,通过改变 `sortOrders` 数组中对应字段的值实现升序和降序的切换,然后使用 `Array` 的 `sort` 方法对表格数据进行排序。
JavaWeb学习之分页查询实例⼀、环境搭建客户端(发送请求)=> Servlet(处理请求,1、指定处理Service 2、指定对应页⾯) => Service(业务处理。
1、调⽤具体Dao并对返回数据做对应处理) => Dao(数据库操作。
单⼀增删改查)基本结构如下图⼆、代码实现分页 1、Sql语句(Sql Server 2012及以上) SELECT * FROM 表名 order by 排序字段OFFSET (当前页-1)*页容量ROWS FETCH next页容量rows only 2、domain包⽤于存储数据实体结构 2.1、PageBean.java1/**2* PageBean<T>,泛型可以提⾼其复⽤性3* ⽤于分页:4* 1、页容量(PageSize)5* 2、当前页⾯(PageIndex)6* 3、总页数(PageCount)7* 4、总条数(PageTotal)8* 5、分页数据集合(List)9*/10public class PageBean<T> {11private int PageSize;12private int PageIndex;13private int PageCount;14private int PageTotal;15private List<T> list;16public int getPageSize() {17return PageSize;18 }19public void setPageSize(int pageSize) {20 PageSize = pageSize;21 }22public int getPageIndex() {23return PageIndex;24 }25public void setPageIndex(int pageIndex) {26 PageIndex = pageIndex;27 }28public int getPageCount() {29return PageCount;30 }31public void setPageCount(int pageCount) {32 PageCount = pageCount;33 }34public int getPageTotal() {35return PageTotal;36 }37public void setPageTotal(int pageTotal) {38 PageTotal = pageTotal;39 }40public List<T> getList() {41return list;42 }43public void setList(List<T> list) {44this.list = list;45 }46 } 2.2、UserInfo1public class UserInfo {2private String UName;3private Date SubTime;//java.util.Date4private String Remark;5public String getUName() {6return UName;7 }8public void setUName(String uname) {9 UName = uname;10 }11public Date getSubTime() {12return SubTime;13 }14public void setSubTime(Date subTime) {15 SubTime = subTime;16 }17public String getRemark() {18return Remark;19 }20public void setRemark(String remark) {21 Remark = remark;22 }23 } 3、dao.impl包实现dao包中的接⼝1public class UserInfoDaoImpl implements IUserInfoDao {23/**4 * 获取分页数据5*/6 @Override7public List<UserInfo> getUserInfoByPageIndex(int p_intPageIdex) throws SQLException {8 QueryRunner runner= new QueryRunner(JDBCUtil.getDataSource());9return runner.query("select * from UserInfo order by Id offset ? row fetch next ? row only",10new BeanListHandler<UserInfo>(UserInfo.class), (p_intPageIdex-1)*PAGE_SIZE,PAGE_SIZE);11 }1213/**14 * 获取总记录数15*/16 @Override17public int getUserInfoCount() throws SQLException {18 QueryRunner runner= new QueryRunner(JDBCUtil.getDataSource());19 Long countLong= (Long) runner.query("select Count(*) from UserInfo",new ScalarHandler());20return countLong.intValue();//Long类型获取int类型的值21 }22 } 4、service.impl包实现service包中的接⼝1public class UserInfoServiceImpl implements IUserInfoService {23 @Override4public PageBean<UserInfo> getPageList(int p_intPageIndex) throws SQLException {5 PageBean<UserInfo> bean=new PageBean<UserInfo>();6 bean.setPageIndex(p_intPageIndex);7int pageSize=IUserInfoDao.PAGE_SIZE;8 bean.setPageSize(pageSize);9 IUserInfoDao dao=new UserInfoDaoImpl();10 bean.setList(dao.getUserInfoByPageIndex(p_intPageIndex));11int count=dao.getUserInfoCount();12 bean.setPageCount(count);1314//200,10 2015//201,10 1116 bean.setPageTotal(count % pageSize == 0 ? count / pageSize : (count / pageSize) + 1);17return bean;18 }19 } 5、servlet调⽤service.impl中的⽅法1public class UserInfoServlect extends HttpServlet {23 @Override4protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {5try {67int intPageIndex = 1;8if(req.getParameter("pageIndex")!=null) {9 intPageIndex=Integer.parseInt(req.getParameter("pageIndex"));10 }11 IUserInfoService service=new UserInfoServiceImpl();12 PageBean<UserInfo> bean= service.getPageList(intPageIndex);13 req.setAttribute("bean", bean);14 req.getRequestDispatcher("Index.jsp").forward(req, resp);15 } catch (SQLException e) {1617 e.printStackTrace();18 }19 }2021 @Override22protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {2324 doGet(req, resp);25 }26 } 6、创建jsp⽂件 6.1、导⼊标签库 把jstl包复制到⼯程lib⽬录下,使⽤<%@ taglib prefix="c" uri="/jsp/jstl/core" %>此代码将jstl标签库导⼊到当前页⾯ 注意:Index.jsp⽂件是创建在WebContent⽬录下 6.2、完整代码1 <%@ page language="java" contentType="text/html; charset=UTF-8"2 pageEncoding="UTF-8"%>3 <%@ taglib prefix="c" uri="/jsp/jstl/core" %>4<!DOCTYPE html>5<html>6<head>7<meta charset="UTF-8">8<title>Insert title here</title>9</head>10<body>11<TABLE border="1" width="700">12<TR>13<TD>姓名</TD>14<TD>时间</TD>15<TD>备注</TD>16</TR>17<c:forEach items="${bean.list }" var="userInfo">18<TR>19<TD>${userInfo.UName }</TD>20<!-- 根据 JavaBeans 规范,属性的前两个字母不能是⼀⼤⼀⼩,或者是⼀⼩⼀⼤。
在实际⼯工作中,我们经常有排序和分⻚页的需求,很多⼩小伙伴都在写⾃自⼰己的 Page 对象和排序逻辑,通过本节内容我们来看下 Spring Data JPA 对分⻚页和排序做了哪些⽀支持。
Spring Data 附带各种 Web ⽀支持如果模块⽀支持库的编程模型。
通过 @EnableSpringDataWebSupport 这个注解可以启⽤用 Web 集成⽀支持。
@EnableSpringDataWebSupport 注解配置在 JavaConfig 类上即可,如下:@Configuration @EnableWebMvc //开启⽀支持Spring Data web 的⽀支持@EnableSpringDataWebSupport public class WebConfiguration { }@Controller 上直接使⽤用 org.springframework.data.domain.Pageable 接收 Page 和分⻚页相关参数,利⽤用org.springframework.data.domain.Page 可以返回相关的 Page 对象的值,如下:第10课:对 MVCWeb 的⽀支持分⻚页和排序的⽀支持配置⽅方法利⽤用 @EnableSpringDataWebSupport G i t C h a timport org.springframework.data.domain.Page;import org.springframework.data.domain.PageRequest;import org.springframework.data.domain.Sort;@Controller @RequestMapping(path = "/demo")public class UserInfoController { @Autowired private UserRepository userRepository;/** * 案例1:使⽤用分⻚页和排序的 Pageable 对象返回 Page 对象。
* @param pageable * @return */@RequestMapping(path = "/user/page")@ResponseBody public Page<UserInfoEntity> findAllByPage(Pageable pageable) { return userRepository.findAll(pageable);}/** * 案例2:单独使⽤用排序,返回 HttpEntity 结果 * @param sort * @return */@RequestMapping(path = "/user/sort")@ResponseBody public HttpEntity<List<UserInfoEntity>> findAllBySort(Sort sort) { return new HttpEntity(userRepository.findAll(sort));}}这种⽅方法签名会导致 Spring MVC 尝试可分⻚页实例,⽽而请求参数使⽤用默认配置如下:Pageable ⾥里⾯面的字段描述page 你想要查找的第⼏几⻚页,如果你不传,默认是 0size 分⻚页⼤大⼩小,默认是 20sort 属性,应按格式 property,property(ASC|DESC)。
默认排序升序从⼩小到⼤大 ASC ,使⽤用多个 sort 参数,如果你想切换⽅方向,例如,?sort=firstname&sort=lastname,asc 所以请求的⽅方式如下。
(1)$ curl http://127.0.0.1:8080/demo/user/page G i t C h a t学习过 Spring MVC 的同学都知道实现 HandlerMethodArgumentResolver 接⼝口可以⾃自定义参数解析。
⽽而Spring Data JPA 正是利⽤用此特性,有两个参数解析类:PageableHandlerMethodArgumentResolver 的实例和 SortHandlerMethodArgumentResolver 的实例,帮我们解析 URL ⾥里⾯面的 Query Param 的 Page 相关的和Sort 相关的参数。
(1)@EnableSpringDataWebSupport 注解帮我们导⼊入 SpringDataWebConfiguration 关键源码如下:public String[] selectImports(AnnotationMetadata importingClassMetadata) { List<String> imports = new ArrayList<>(); imports.add(ProjectingArgumentResolverRegistrar.class.getName()); imports.add(resourceLoader// .filter(it -> ClassUtils.isPresent("org.springframework.hateoa s.Link", it))// .map(it -> HateoasAwareSpringDataWebConfiguration.class.getNam e())// .orElseGet(() -> SpringDataWebConfiguration.class.getName())); resourceLoader// .filter(it -> ClassUtils.isPresent("com.fasterxml.jackson.data bind.ObjectMapper", it))// .map(it -> SpringFactoriesLoader.loadFactoryNames(SpringDataJa cksonModules.class, it))// .ifPresent(it -> imports.addAll(it)); return imports.toArray(new String[imports.size()]); }(2)SpringDataWebConfiguration 帮我们加载 SortHandlerMethodArgumentResolver 和PageableHandlerMethodArgumentResolver ,关键源码如下:HandlerMethodArgumentResolvers 可分⻚页和排序G i t C h a t@Bean public PageableHandlerMethodArgumentResolver pageableResolver() { PageableHandlerMethodArgumentResolver pageableResolver = // new PageableHandlerMethodArgumentResolver(sortResolver()); customizePageableResolver(pageableResolver); return pageableResolver; } /* * (non-Javadoc) * @see org.springframework.data.web.config.SpringDataWebConfiguration#sortRes olver() */ @Bean public SortHandlerMethodArgumentResolver sortResolver() { SortHandlerMethodArgumentResolver sortResolver = new SortHandlerMethodArgu mentResolver(); customizeSortResolver(sortResolver); return sortResolver; }(3)PageableHandlerMethodArgumentResolver 的关键源码如下:通过此段源码其实也可以发现 Spring Data JPA 有默认分⻚页的⼤大⼩小,最⼤大 2000 size ,主要解析 page 和 size 参数。
G i t C h a tpublic class PageableHandlerMethodArgumentResolver implements PageableArgumentReso lver { private static final SortHandlerMethodArgumentResolver DEFAULT_SORT_RESOLVER = new SortHandlerMethodArgumentResolver(); private static final String INVALID_DEFAULT_PAGE_SIZE = "Invalid default page size configured for method %s! Must not be less than one!"; private static final String DEFAULT_PAGE_PARAMETER = "page"; private static final String DEFAULT_SIZE_PARAMETER = "size"; private static final String DEFAULT_PREFIX = ""; private static final String DEFAULT_QUALIFIER_DELIMITER = "_"; private static final int DEFAULT_MAX_PAGE_SIZE = 2000; static final Pageable DEFAULT_PAGE_REQUEST = PageRequest.of(0, 20); @Override public Pageable resolveArgument(MethodParameter methodParameter, @Nullable Mod elAndViewContainer mavContainer, NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFact ory) { assertPageableUniqueness(methodParameter); Optional<Pageable> defaultOrFallback = getDefaultFromAnnotationOrFallback(methodParameter).toOptional(); String pageString = webRequest.getParameter(getParameterNameToUse(pagePara meterName, methodParameter)); String pageSizeString = webRequest.getParameter(getParameterNameToUse(size ParameterName, methodParameter));......return PageRequest.of(p, ps, sort.isSorted() ? sort : defaultOrFallback.map(Pageable::getSort).orElseGet(Sort::unsorted));}}通过此段源码其实还可以发现 PageRequest 是 Pageable 的默认实现类,此处给我们提供了⼀一种思路,当使⽤用 RPC 的 Service 的调⽤用的时候,可以⽤用过 new PageRequest 传递分⻚页逻辑。