Принцип реализации пейджинга MyBatis
Принцип реализации пейджинга MyBatis

MyBatis — популярная платформа сохранения Java.,Используется для упрощения процесса разработки доступа к базе данных. В реальном развитии,Функция пагинации является одним из очень распространенных требований. MyBatis предоставляет простой и эффективный способ реализации пейджинга.,В то же время вы также можете объединить плагин подкачки для улучшения функции подкачки.。В этой статье будет подробно представлено Принцип реализации пейджинга Как работают MyBatis и плагины подкачки.

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

  1. Запросите общее количество записей. Прежде чем выполнять пейджинговый запрос, сначала необходимо запросить общее количество записей. MyBatis предоставляет метод select count(*) для получения общего количества записей. Этот метод сгенерирует оператор запроса, но не вернет набор результатов. Вместо этого он вернет целочисленное значение, которое представляет собой общее количество записей.
  2. Установка параметров подкачки. Перед выполнением запроса подкачки вам необходимо установить параметры подкачки, включая количество записей, отображаемых на каждой странице, и номер текущей страницы. MyBatis предоставляет класс RowBounds для реализации функций разбиения на страницы. Установив атрибуты offset и limit RowBounds, вы можете указать начальную позицию запроса и количество запрашиваемых записей.
  3. Выполнение запроса на пейджинг. После установки параметров пейджинга вы можете выполнить пейджинговый запрос. MyBatis сгенерирует соответствующий оператор запроса на основе установленных параметров подкачки и выполнит оператор запроса в базе данных. Результаты запроса будут инкапсулированы в коллекцию List и возвращены вызывающей стороне.

2. Как работает плагин пейджинга

Хотя MyBatis предоставляет базовые функции подкачки, в реальной разработке нам могут потребоваться более гибкие и мощные функции подкачки. Чтобы удовлетворить это требование, вы можете использовать плагин подкачки для улучшения функции подкачки. Ниже описано, как работает подключаемый модуль подкачки.

  1. Перехватчик Плагин пейджинга реализован через перехватчик MyBatis. Перехватчик может перехватывать данные до или после того, как MyBatis выполнит оператор SQL, а также выполнять некоторые настраиваемые операции во время процесса перехвата.
  2. Цепочка перехватчиков Перехватчики MyBatis организованы в виде цепочки перехватчиков. Перед выполнением оператора SQL цепочка перехватчиков вызывает метод перехвата каждого перехватчика в определенном порядке. При вызове метода перехвата перехватчик может изменить оператор SQL или выполнить другие настраиваемые операции.
  3. Перехватчик пейджинговой связи Ядром подключаемого модуля пейджинговой связи является перехватчик пейджинговой связи. Этот перехватчик перехватит оператор SQL перед его выполнением и динамически изменит оператор SQL в соответствии с параметрами подкачки для реализации функции подкачки. В частности, перехватчик подкачки сгенерирует оператор SQL подкачки на основе параметров подкачки и заменит исходный оператор SQL сгенерированным оператором SQL. После выполнения инструкции SQL подкачки перехватчик подкачки инкапсулирует результаты запроса в объект Page и возвращает их вызывающей стороне.
  4. Передача параметров пейджинга Чтобы передать параметры пейджинга на пейджинг Перехватчик,Соответствующую настройку необходимо выполнить в файле конфигурации MyBatis. в файле конфигурации,Может быть установлен с помощью<plugin>тег, чтобы представить плагин подкачки,И задайте параметры пейджинга Перехватчик.
  5. Пользовательские подключаемые модули подкачки Помимо использования существующих подключаемых модулей подкачки, разработчики также могут настраивать подключаемые модули подкачки в соответствии со своими потребностями. Пользовательский подключаемый модуль подкачки должен реализовать интерфейс Interceptor MyBatis и переопределить метод перехвата. В методе перехвата вы можете реализовать функцию пейджинга в соответствии со своими потребностями.

Ниже приведен пример кода с использованием MyBatis для запроса на разбиение по страницам:

Сначала добавьте плагин подкачки в файл конфигурации MyBatis:

Язык кода:html
копировать
<plugins>
    <plugin interceptor="com.example.PageInterceptor">
        <property name="dialect" value="mysql"/>
    </plugin>
</plugins>

Затем создайте собственный подключаемый модуль подкачки PageInterceptor, реализуйте интерфейс MyBatis Interceptor и переопределите метод перехвата:

Язык кода:javapublic class PageInterceptor implements Interceptor {
копировать
    private String dialect; // диалект базы данных

    @Override    public Object intercept(Invocation invocation) throws Throwable {
        // Получить исходный оператор SQL        MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
        BoundSql boundSql = mappedStatement.getBoundSql(invocation.getArgs()[1]);
        String sql = boundSql.getSql();

        // Получить параметры пейджинга        Object parameter = boundSql.getParameterObject();
        Page page = null;
        if (parameter instanceof Page) {
            page = (Page) parameter;
        }

        // Измените исходный оператор SQL и добавьте логику подкачки.        if (page != null) {
            String pageSql = generatePageSql(sql, page);
            // Установите измененный оператор SQL обратно            ReflectionUtils.setFieldValue(boundSql, "sql", pageSql);
        }

        // Выполнить пейджинговый запрос        Object result = invocation.proceed();

        // Инкапсулируйте результаты запроса в объекты страницы.
        if (page != null && result instanceof List) {
            page.setList((List) result);
        }

        return result;
    }

    private String generatePageSql(String sql, Page page) {
        // По данным диалекта базы данных Создание инструкций SQL подкачки        if ("mysql".equals(dialect)) {
            return sql + " limit " + page.getStart() + ", " + page.getPageSize();
        } else if ("oracle".equals(dialect)) {
            int start = page.getStart() + 1;
            int end = page.getStart() + page.getPageSize();
            return "select * from (select rownum as rn, t.* from (" + sql + ") t where rownum <= " + end + ") where rn >= " + start;
        } else {
            throw new UnsupportedOperationException("Unsupported dialect: " + dialect);
        }
    }

    @Override    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    @Override    public void setProperties(Properties properties) {
        this.dialect = properties.getProperty("dialect");
    }
}

Наконец, определите метод запроса подкачки в интерфейсе Mapper:

Язык кода:javapublic interface UserMapper {
копировать
    List<User> selectUserList(Page page);
}

Пример использования:

Язык кода:javapublic class Main {
копировать
    public static void main(String[] args) {
        // Создать объект нумерации страниц        Page page = new Page(1, 10);

        // Вызов метода пейджингового запроса        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = userMapper.selectUserList(page);

        // Получить информацию о нумерации страниц        System.out.println("Общее количество записей:" + page.getTotal());
        System.out.println("Номер текущей страницы:" + page.getPageNum());
        System.out.println("Количество записей на странице:" + page.getPageSize());
        System.out.println("Общее количество страниц:" + page.getPages());
        System.out.println("Данные текущей страницы:" + userList);
    }
}

В приведенном выше примере кода показано, как использовать собственный подключаемый модуль подкачки для реализации функции запроса подкачки. В плагине пагинации, созданном на основе диалекта базы данных

Подведите итог:

Функция подкачки MyBatis реализуется путем запроса общего количества записей, установки параметров подкачки и выполнения запросов подкачки. В то же время подключаемый модуль пейджинга расширяет функцию пейджинга с помощью перехватчиков, делая пейджинг более гибким и мощным. Разработчики могут использовать существующие подключаемые модули подкачки или собственные подключаемые модули подкачки для реализации функции подкачки в соответствии со своими потребностями.

Функция пагинации очень распространена в реальной разработке.,Это может улучшить взаимодействие с пользователем и снизить нагрузку на загрузку данных. MyBatis обеспечивает простую и эффективную функцию пейджинга.,Это позволяет разработчикам легко реализовывать пейджинговые запросы. в то же время,Внедрение подключаемого модуля пейджинга может еще больше улучшить функцию пейджинга.,Удовлетворение более сложных потребностей в пейджинге. Узнайте, как работают MyBatis и плагины подкачки,Очень важно для интернет-экспертов,Это может повысить эффективность разработки и качество кода.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose