Mybatis-plus предоставляет встроенный модуль InsertBatchSomeCulumn для реализации настоящей пакетной вставки, но поскольку он поддерживает только синтаксический формат MySQL, он не используется по умолчанию в общем API.
@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.
public interface UserMapper extends BaseMapper<User> {
Integer insertBatchSomeColumn(List<User> users);
}
InsertBatchSomeColumn — это имя метода по умолчанию. Вы можете указать InsertBatchSomeColumn(String) в конфигурации шага 1. name, Predicate<TableFieldInfo> предикат) имя метода.
Недостаток использования встроенного метода: список вставленных полей не может быть определен на основе того, не является ли вставленный класс сущности пустым. Если он пуст, будет вставлено нулевое значение. Это приведет к тому, что мы получим значение по умолчанию. установлен в базе данных как недействительный.
1. Введение зависимостей
<dependency>
<groupId>io.github.timoyung</groupId>
<artifactId>mybatis-plus-batch-core</artifactId>
<version>1.1.2</version>
</dependency>
2. Реализуйте класс BatchServiceImpl.
public interface UserService extends IBatchService<User> {
}
@Service
public class UserServiceImpl extends BatchServiceImpl<UserMapper, User> implements UserService {
}
3. Используйте метод пакетной вставки (шаблон по умолчанию).
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. Используйте метод пакетной вставки (укажите шаблон)
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);
Указанный метод шаблона будет использовать непустые поля экземпляра шаблона для определения вставленных полей. Хотя использование указанного метода шаблона может гарантировать, что вставленные поля не будут максимально точными, это также может привести к изменению значения базы данных по умолчанию. становятся недействительными из-за встроенного метода.
Каждый метод пакетной вставки имеет свои преимущества и недостатки, и вам нужно решить, какой из них использовать, исходя из конкретных потребностей вашего собственного проекта. Не существует универсального метода.