1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/cat73-mybatis-pager

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
1.QuickStart.md 8.9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 13:34 ba0eea9

Быстрый старт

Импорт зависимостей

Текущая версия:

Gradle

В файле проекта build.gradle добавьте зависимость от текущего проекта:

dependencies {
    ...

    compile "org.cat73:mybatis-pager-spring-boot-starter:версия"

    ...
}

Maven

В файл проекта 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": [... список данных ...]
  }
}

Параметры

Как передать параметры на задний план? Например, как запросить вторую страницу?

Это очень просто, вам нужно предоставить только два параметра запроса:

  1. page: запрашиваемая страница, начиная с 1, по умолчанию 1;
  2. pageSize: количество записей на странице, по умолчанию 10.

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

Давайте посмотрим, как передать эти несколько параметров:

На данный момент существует два способа передачи параметров:

  1. Строка запроса, то есть часть после вопросительного знака в URL, например, для вышеуказанного тестового интерфейса:

    http://localhost:8080/api/demo/list?page=1&pageSize=10

  2. Заголовок запроса, то есть содержимое второй строки до двойного переноса строки в 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/cat73-mybatis-pager.git
git@api.gitlife.ru:oschina-mirror/cat73-mybatis-pager.git
oschina-mirror
cat73-mybatis-pager
cat73-mybatis-pager
master