如何执行分页请求-Spring Boot

时间:2018-07-05 12:43:02

标签: java spring-boot jooq

在我的系统(Spring启动项目)中,我需要向每350个搜索我的数据的人发出一个请求,我需要分页并发送。我寻找了很多方法来实现它,并在JPA中找到了很多方法,但是我使用的是Jooq,因此我向用户的工具寻求帮助,他们指导我使用限制和偏移量选项。

这是我进行研究的方法,我设置了DTO,最后返回了人员列表。

 public static ArrayList getAllPeople(Connection connection) {
    ArrayList<peopleDto> peopleList = new ArrayList<>();
    DSLContext ctx = null;
    peopleDto peopleDto;
    try {
        ctx = DSL.using(connection, SQLDialect.MYSQL);
        Result<Record> result = ctx.select()
                .from(people)
                .orderBy(people.GNUM)
                .offset(0)
                .limit(350)
                .fetch();

        for (Record r : result) {

            peopleDto = new peopleDto();
            peopleDto.setpeopleID(r.getValue(people.GNUM));
            peopleDto.setName(r.get(people.SNAME));
            peopleDto.setRM(r.get(people.SRM));
            peopleDto.setRG(r.get(people.SRG));
            peopleDto.setCertidaoLivro(r.get(people.SCERT));
            peopleDto.setCertidaoDistrito(r.get(people.SCERTD));
            peopleList.add(peopleDto);
        }
    } catch (Exception e) {
        log.error(e.toString());
    } finally {
        if (ctx != null) {
            ctx.close();
        }
    }
    return peopleList;
}

此搜索没有限制,可返回1,400人。 问题是如何发送限制数,然后返回此方法以继续上次停止的操作,直到达到记录的总值?

1 个答案:

答案 0 :(得分:1)

为您的方法提供Pageable参数,并从方法中返回Page。类似于...

public static ArrayList getAllPeople(Connection connection, Pageable pageable) {
    ArrayList<peopleDto> peopleList = new ArrayList<>();
    DSLContext ctx = null;
    peopleDto peopleDto;
    try {
        ctx = DSL.using(connection, SQLDialect.MYSQL);
        Result<Record> result = ctx.select()
                .from(people)
                .orderBy(people.GNUM)
                .offset(pageable.getOffset())
                .limit(pageable.getPageSize())
                .fetch();

        for (Record r : result) {

            peopleDto = new peopleDto();
            peopleDto.setpeopleID(r.getValue(people.GNUM));
            peopleDto.setName(r.get(people.SNAME));
            peopleDto.setRM(r.get(people.SRM));
            peopleDto.setRG(r.get(people.SRG));
            peopleDto.setCertidaoLivro(r.get(people.SCERT));
            peopleDto.setCertidaoDistrito(r.get(people.SCERTD));
            peopleList.add(peopleDto);
        }
    } catch (Exception e) {
        log.error(e.toString());
    } finally {
        if (ctx != null) {
        ctx.close();
        }
    }
    return new PageImpl(peopleList, pageable, hereyoushouldQueryTheTotalItemCount());
}

现在您可以对这350个用户进行操作。在页面的帮助下,您现在可以遍历其余人员:

if(page.hasNext())
    getAllPeople(connection, page.nextPageable());

受本文Sorting and Pagination with Spring and Jooq的启发