Настоящая пакетная вставка mybatis-plus (синтаксис Mysql)
Настоящая пакетная вставка mybatis-plus (синтаксис Mysql)

1. Используйте встроенную пакетную вставку mybatis-plus.

Mybatis-plus предоставляет встроенный модуль InsertBatchSomeCulumn для реализации настоящей пакетной вставки, но поскольку он поддерживает только синтаксический формат MySQL, он не используется по умолчанию в общем API.

  1. Поместите экземпляр InsertBatchSomeCulumn в список Sqlnjector.
Язык кода:java
копировать
    @Bean
    public DefaultSqlInjector insertBatchSqlInject() {
        return new DefaultSqlInjector() {
            @Override
            public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
                List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);
                methodList.add(new InsertBatchSomeColumn());
                return methodList;
            }
        };
    }

2. Добавьте метод пакетной вставки InsertBatchSomeColumn в свой класс Mapper.

Язык кода:java
копировать
public interface UserMapper extends BaseMapper<User> {

    Integer insertBatchSomeColumn(List<User> users);
}

InsertBatchSomeColumn — это имя метода по умолчанию. Вы можете указать InsertBatchSomeColumn(String) в конфигурации шага 1. name, Predicate<TableFieldInfo> предикат) имя метода.

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

2. Используйте стороннюю реализацию

1. Введение зависимостей

Язык кода:html
копировать
       <dependency>
            <groupId>io.github.timoyung</groupId>
            <artifactId>mybatis-plus-batch-core</artifactId>
            <version>1.1.2</version>
        </dependency>

2. Реализуйте класс BatchServiceImpl.

Язык кода:java
копировать
    public interface UserService extends IBatchService<User> {

    }

    @Service
    public class UserServiceImpl extends BatchServiceImpl<UserMapper, User> implements UserService {
    
    }

3. Используйте метод пакетной вставки (шаблон по умолчанию).

Язык кода:java
копировать
    User user1 = new User();
    user1.setName("Чжан Сан");
    user1.setAge(18);

    User user2 = new User();
    user2.setName("Ли Си");
    user2.setAge(88);
    //Используем количество элементов пакетной вставки по умолчанию: 1000 элементов/время.
    this.userService.insertBatch(Arrays.asList(user1, user2));

    //Указываем количество элементов для вставки в пакеты
    this.userService.insertBatch(Arrays.asList(user1, user2), 500);

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

4. Используйте метод пакетной вставки (укажите шаблон)

Язык кода:java
копировать
    User template = new User();
    template.setName("AA");
    template.setAge(20);
    template.setNickName("МаленькийA")    User user1 = new User();
    user1.setName("Чжан Сан");
    user1.setAge(18);
    user1.setNickName("Сяо Чжан")

    User user2 = new User();
    user2.setName("Ли Си");
    user2.setAge(88);
    
    //Используем количество элементов пакетной вставки по умолчанию: 1000 элементов/время.
    this.userService.insertBatchWithTemplate(Arrays.asList(user1, user2), template);


    //Указываем количество элементов для вставки в пакеты
    this.userService.insertBatchWithTemplate(Arrays.asList(user1, user2), template, 500);

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

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

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода