Jpa пейджинг с номерами и следующий, предыдущий

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

Я хочу добавить пейджинг в приложение, отображающее 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)

за исключением использования счетчика 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.

 javafun24 апр. 2012 г., 19:02
Спасибо за вашу помощь
Решение Вопроса

Вы можете использовать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
}
 javafun24 апр. 2012 г., 19:03
И тебе спасибо

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

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

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

Ваш ответ на вопрос