Вопрос по java, hibernate, spring, jpa, paging – Jpa пейджинг с номерами и следующий, предыдущий

8

Я прошу прощения за то, что задал этот вопрос, если кто-то уже задавал его, и за вопрос, возможно, глупый, но я новичок в этом, и вы являетесь экспертами, и я хотел бы учиться на ваших экспертных советах и опыте.

Я хочу добавить пейджинг в приложение, отображающее 200 записей на странице. Внизу страницы должны быть цифры. Если их 1050, на первой странице будет отображаться 100, а в нижней части страницы будут отображаться цифры 1,2,3,4,5 & amp; 6.

Какова общая логика для достижения этой цели? Я знаю, что база данных должна выбирать 200 каждый раз, и я должен отслеживать первую запись.

Is there a way to know how many records will be returned total so that I can know how many numbers to display on the bottom of the page? Does it require selecting a count() statement or something else? For the 1050 records, The numbers 1,2,3,4,5 & 6 will display and clicking each one requires a call to the server. Is there a way to know how many records will be returned in the next call to the server? Does it require selecting a count() statement or something else?

Ваш Ответ

4   ответа
8

Вы можете использоватьJPA Criteria API чтобы сделать это. Предполагая TypedQuery, вы бы использовалиsetFirstResult а такжеsetLastResult для ограничения записей, возвращаемых из базы данных. Конечно, значения для этих методов будут зависеть от того, какая страница была запрошена, и сколько записей отображается на странице.

first = (page - 1) * page size;
last = (page * size) - 1;

Заметка: Предполагается, что первая страница равна 1 (в отличие от нуля).

Чтобы получить количество записей, вы выполняете стандартный запрос Criteria. В качестве примера

final CriteriaBuilder builder = entityManager.getCriteriaBuilder();
final CriteriaQuery<Long> countQuery = builder.createQuery(Long.class);
countQuery.select(builder.count(countQuery.from(MyEntity.class)));
final Long count = entityManager.createQuery(countQuery)
        .getSingleResult();

Вы можете настроить вышеприведенный код для подсчета относительно другого запроса. Наконец, вам нужен какой-то способ передать общий счет клиенту. Один из способов сделать это - обернуть результирующий набор вашего запроса в другой объект, который содержит атрибут для счетчика или возвращает указанный объект в результате вашего вызова DAO. Или же вы можете сохранить атрибут count в объекте в своей области запроса.

public class ResultListWrapper<T> {
    private Long count;
    private Collection<T> results;

    // constructor, getters, setters
}
И тебе спасибо javafun
2

за исключением использования счетчика int в списке выбора вместо столбцов перед выполнением фактического запроса, чтобы определить количество страниц. Получить определенную страницу в спящем режиме можно затем с помощью чего-то вроде:

int maxRecords = // page size ...
int startRow = // page number * page size
Query query = session.createQuery('...');
query.setMaxResults(maxRecords);
query.setFirstResult(startRow);

Если выполнение дополнительного запроса является слишком дорогой операцией, тогда вы можете рассмотреть возможность предоставления следующих / предыдущих ссылок или альтернативного предоставления дополнительных страниц по мере необходимости (например, когда появляется последняя из загруженных данных) через ajax.

Для отображения постраничных результатов, включая ссылки на номера страниц, я бы предложил (если вы используете страницы jsp для отображения этих данных), используя показать тег Библиотека тегов JSP. Тег Display обрабатывает отображение страниц и сортировку табличных данных, предполагая, что вы можете передать их в JSP.

Спасибо за вашу помощь javafun
0

вы должны сделать выборочный подсчет, прежде чем получать сами строки.

0

Источник данных JPA. В основном это работает так, как предполагал ранее Восприятие, просто вам не нужно это делать, фреймворк делает это за вас. Вы получаете пейджинг и сортировку по умолчанию (вам все равно нужно выполнить фильтрацию самостоятельно, если вы не хотите использоватьQuery DSL).

На главной странице у них есть 1-часовое видео, которое показывает краткое введение, но вам нужно всего лишь около 15 минут, чтобы понять, что делает id.

Похожие вопросы