当前位置:   article > 正文

跟着JHipster学做项目 (17) Spring Boot处理分页和排序_springboot 分页 根据前端传值排序

springboot 分页 根据前端传值排序

JHipster利用了Spring Boot的Pageable分页机制,前端排序是针对数据库数据,而非当前页面数据,充分满足了实际需求。下面分前端和后端两部分分别介绍一下它的实现方式。

前端利用两个辅助函数,向后端传递了分页参数:当前页page,每页条目size,排序属性prop,direction。本文以mongoDB为例。

sort函数中接收了排序属性和排序方向,同序情况下以id降序。

  1. public sort(): any {
  2. const result = [this.propOrder + ',' + (this.reverse ? 'desc' : 'asc')];
  3. if (this.propOrder !== 'id') {
  4. result.push('id');
  5. }
  6. return result;
  7. }

buildPaginationQueryOpts函数是组装了后端Pageable所需要的属性。

  1. function buildPaginationQueryOpts(paginationQuery) {
  2. if (paginationQuery) {
  3. let sorts = '';
  4. for (const idx of Object.keys(paginationQuery.sort)) {
  5. if (sorts.length > 0) {
  6. sorts += '&';
  7. }
  8. sorts += 'sort=' + paginationQuery.sort[idx];
  9. }
  10. return `${sorts}&page=${paginationQuery.page}&size=${paginationQuery.size}`;
  11. }
  12. return '';
  13. }

最后在retrieve中向后端发出请求:

  1. public retrieve(req?: any): Promise<any> {
  2. return axios.get(`api/admin/users?${buildPaginationQueryOpts(req)}`);
  3. }

例如:每页显示3行,显示第一页,以login升序排列,请求URL为:

http://localhost:9000/api/admin/users?sort=login,asc&sort=id&page=1&size=3

至此开始介绍后端接收请求后的分页和排序实现方法。

UserResource接收如上参数,利用Spring Boot自带机制,自动组合为Pageable对象,代码如下:

  1. @GetMapping("/users")
  2. @PreAuthorize("hasAuthority(\"" + AuthoritiesConstants.ADMIN + "\")")
  3. public ResponseEntity<List<AdminUserDTO>> getAllUsers(Pageable pageable) {
  4. log.debug("REST request to get all User for an admin");
  5. if (!onlyContainsAllowedProperties(pageable)) {
  6. return ResponseEntity.badRequest().build();
  7. }
  8. final Page<AdminUserDTO> page = userService.getAllManagedUsers(pageable);
  9. HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page);
  10. return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK);
  11. }

UserService就是简单利用userRepository来进行数据库查询,代码如下:

  1. public Page<AdminUserDTO> getAllManagedUsers(Pageable pageable) {
  2. return userRepository.findAll(pageable).map(AdminUserDTO::new);
  3. }

UserRepository继承了MongoRepository

  1. @Repository
  2. public interface UserRepository extends MongoRepository<User, String> {
  3. Optional<User> findOneByActivationKey(String activationKey);
  4. List<User> findAllByActivatedIsFalseAndActivationKeyIsNotNullAndCreatedDateBefore(Instant dateTime);
  5. Page<User> findAll(Pageable pageable);
  6. }

Good Luck,

Cheers!

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

闽ICP备14008679号