Быстрый старт
Импорт зависимостей
В файле проекта build.gradle
добавьте зависимость от текущего проекта:
dependencies {
...
compile "org.cat73:mybatis-pager-spring-boot-starter:версия"
...
}
В файл проекта pom.xml
добавьте зависимость от текущего проекта:
<dependencies>
...
<dependency>
<groupId>org.cat73</groupId>
<artifactId>mybatis-pager-spring-boot-starter</artifactId>
<version>версия</version>
</dependency>
...
</dependencies>
Добавление поддержки разбиения на страницы в интерфейс
Для методов, помеченных @RequestMapping
, добавьте аннотацию @Pager
, чтобы включить поддержку разбивки на страницы для этого интерфейса.
Обычно в этом методе должен быть только один запрос (можно разрешить несколько запросов, но это будет рассмотрено позже).
По умолчанию поддерживается только возврат Map
, и значение ключа data
должно быть Collection
. Например:
/**
* Интерфейс тестирования разбивки на страницы
*/
@RestController
@RequestMapping("/api/demo")
public class DemoController {
@Autowired
private IDemoService service;
@Pager // Разбивка на страницы
@GetMapping("/list")
public Map<String, Object> list() {
List<Demo> list = this.service.listAll(); // Только один запрос, значение должно быть Collection
Map<String, Object> result = new HashMap<>();
result.put("data", list); // Ключ data
return result;
}
}
Пользовательский тип возвращаемого значения
Конечно, это довольно хлопотно, наш проект использует классы сущностей в качестве возвращаемых значений. Вот пример класса сущности:
public class Result<T> {
/**
* Код ответа, отрицательный — ошибка, положительный — успех, подробности см. в документации по интерфейсу
*/
private int c; // code
/**
* Ответные данные, при ошибке — строка с причиной ошибки, при успехе — возвращаемое значение
*/
private T d; // data
// ... Опускаем конструктор, методы получения и установки ...
}
Этот класс сущности выглядит довольно лаконичным и экономичным с точки зрения передачи данных. Однако он не поддерживается по умолчанию.
Однако после небольшой настройки его можно поддерживать. Создайте собственный обработчик возвращаемых значений и зарегистрируйте его при запуске приложения:
/**
* Мой собственный обработчик возвращаемых значений
*/
@Component // Регистрация как Spring Bean
public class MyResultHandler implements IPagerResultHandler<Result<Object>> {
// Извлекаем данные разбивки на страницы из возвращаемого значения
@Override
public Collection<?> getData(Result<Object> result) {
return (Collection<?>) result.getD();
}
// Записываем результаты разбивки на страницы в возвращаемое значение
@Override
public void setData(Result<Object> result, PageBody<?> pageBody) {
result.setD(pageBody);
}
}
/**
* Тестирование интерфейса разбивки на страницы
*/
@RestController
@RequestMapping("/api/demo")
public class DemoController {
@Autowired
private IDemoService service;
@Pager // Разбиение на страницы
@GetMapping("/list")
public Result<List<Demo>> list() {
List<Demo> list = this.service.listAll(); // Просто верните
return new Result<>(0, list); // Следуйте предыдущему стилю кодирования
}
}
Ответ переднего плана
После обработки аннотацией разбивки на страницы ответ интерфейса отличается от необработанного интерфейса. Например, в примере выше, после преобразования в JSON и вывода на передний план:
// Исходное возвращаемое значение
{"c":0,"d":[... список данных ...]}
// После добавления аннотации разбивки на страницы возвращаемое значение
{"c":0,"d":{"page":1,"totalRow":20,"totalPage":2,"listData":[... список данных ...]}}
Можно видеть, что после добавления аннотации к исходному значению data
, часть значения изменилась. Давайте посмотрим поближе:
{
"c": 0,
"d": {
"page": 1, // Текущая страница
"totalRow": 20, // Всего записей
"totalPage": 2, // Всего страниц
// До добавления аннотации разбивки на страницы значение data было таким же, хотя формат был таким же
"listData": [... список данных ...]
}
}
Параметры
Как передать параметры на задний план? Например, как запросить вторую страницу?
Это очень просто, вам нужно предоставить только два параметра запроса:
page
: запрашиваемая страница, начиная с 1, по умолчанию 1;pageSize
: количество записей на странице, по умолчанию 10.Экспортный режим мы обсудим позже, сейчас мы можем удовлетворить потребности с помощью первых двух параметров.
Давайте посмотрим, как передать эти несколько параметров:
На данный момент существует два способа передачи параметров:
Строка запроса, то есть часть после вопросительного знака в URL
, например, для вышеуказанного тестового интерфейса:
http://localhost:8080/api/demo/list?page=1&pageSize=10
Заголовок запроса, то есть содержимое второй строки до двойного переноса строки в HTTP
пакете, например, для вышеупомянутого интерфейса:
GET /api/demo/list HTTP/1.1
Host: localhost:8080
Page: 1
PageSize: 10
Вы можете сказать, что в нашем проекте уже есть особое использование определённого параметра, например, глобальный Filter
требует использования параметра page
.
Хотя это редко встречается, всё же есть решение. Вам нужно только добавить конфигурацию в application.yml
или application.properties
:
pager:
# Префикс параметра, если установлен на myprefix_, то имя параметра страницы будет myprefix_page, по умолчанию пустая строка
prefix: myprefix_
Теперь проблема решена, просто добавьте этот префикс к параметру при передаче на передний план, например, myprefix_page
для параметра page
.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )