Как сделать постраничный запрос - Spring boot - PullRequest
0 голосов
/ 05 июля 2018

в моей системе (Spring boot project) Мне нужно сделать запрос каждые 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;
}

Этот поиск без ограничений возвращает 1400 человек. Вопрос в том, как отправить число лимита и вернуться к этому методу, чтобы продолжить с того места, где я остановился в последний раз, пока не достигну общей стоимости записей?

1 Ответ

0 голосов
/ 05 июля 2018

Введите ваш метод с параметром Pageable и верните страницу из вашего метода. Что-то вроде ...

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());

Вдохновленный этой статьей Сортировка и разбиение на страницы с Spring и Jooq

...