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

跟着JHipster学做项目 (17) Spring Boot处理分页和排序

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

跟着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 {
    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 getAllUsers(Pageable pageable) {
        log.debug("REST request to get all User for an admin");
        if (!onlyContainsAllowedProperties(pageable)) {
            return ResponseEntity.badRequest().build();
        }

        final Page page = userService.getAllManagedUsers(pageable);
        HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page);
        return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK);
    }
UserService就是简单利用userRepository来进行数据库查询,代码如下:
    public Page getAllManagedUsers(Pageable pageable) {
        return userRepository.findAll(pageable).map(AdminUserDTO::new);
    }
UserRepository继承了MongoRepository
@Repository
public interface UserRepository extends MongoRepository {
    Optional findoneByActivationKey(String activationKey);

    List findAllByActivatedIsFalseAndActivationKeyIsNotNullAndCreatedDateBefore(Instant dateTime);

    Page findAll(Pageable pageable);
}

Good Luck,

Cheers!

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

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

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