我是靠谱客的博主 长情纸飞机,最近开发中收集的这篇文章主要介绍跟着JHipster学做项目 (17) Spring Boot处理分页和排序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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

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

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

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

function buildPaginationQueryOpts(paginationQuery) {
  if (paginationQuery) {
    let sorts = '';
    for (const idx of Object.keys(paginationQuery.sort)) {
      if (sorts.length > 0) {
        sorts += '&';
      }
      sorts += 'sort=' + paginationQuery.sort[idx];
    }
    return `${sorts}&page=${paginationQuery.page}&size=${paginationQuery.size}`;
  }
  return '';
}

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

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

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

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

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

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

    @GetMapping("/users")
    @PreAuthorize("hasAuthority("" + AuthoritiesConstants.ADMIN + "")")
    public ResponseEntity<List<AdminUserDTO>> getAllUsers(Pageable pageable) {
        log.debug("REST request to get all User for an admin");
        if (!onlyContainsAllowedProperties(pageable)) {
            return ResponseEntity.badRequest().build();
        }

        final Page<AdminUserDTO> page = userService.getAllManagedUsers(pageable);
        HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page);
        return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK);
    }

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

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

UserRepository继承了MongoRepository

@Repository
public interface UserRepository extends MongoRepository<User, String> {
    Optional<User> findOneByActivationKey(String activationKey);

    List<User> findAllByActivatedIsFalseAndActivationKeyIsNotNullAndCreatedDateBefore(Instant dateTime);

    Page<User> findAll(Pageable pageable);
}

Good Luck,

Cheers!

最后

以上就是长情纸飞机为你收集整理的跟着JHipster学做项目 (17) Spring Boot处理分页和排序的全部内容,希望文章能够帮你解决跟着JHipster学做项目 (17) Spring Boot处理分页和排序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部