- 创建自定义数据方法注入类
package com.wsh.util;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.extension.injector.methods.additional.InsertBatchSomeColumn;
import java.util.List;
public class EasySqlInjector extends DefaultSqlInjector {
@Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
// 防止父类方法不可用
List<AbstractMethod> methodList = super.getMethodList(mapperClass);
methodList.add(new InsertBatchSomeColumn());
return methodList;
}
}
- 在MybatisPlus配置文件MybatisPlusConfig加入自定义
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import com.wsh.util.EasySqlInjector;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableTransactionManagement
@Configuration
@MapperScan("com.wsh.mapper")
public class MybatisPlusConfig {
@Bean
public EasySqlInjector easySqlInjector(){
return new EasySqlInjector();
}
}
- 扩展通用Mapper,支持数据批量插入,即:创建EasyBaseMapper接口继承BaseMapper
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.Collection;
/**
* @author suahng
* @date 2021-07-21 20:47
* @dec
*/
public interface EasyBaseMapper<T> extends BaseMapper<T> {
/**
* 批量插入,仅使用批量插入
* @param entityList 实体列表
* @return 影响行数
*/
Integer insertBatchSomeColumn(Collection<T> entityList);
}
- 定义业务mapper接口,继承刚刚扩展的
EasyBaseMapper
import com.wsh.entity.Order;
import org.springframework.stereotype.Repository;
@Repository
public interface EasyMapper extends EasyBaseMapper<Order> {
}
- 定义Service接口
import com.baomidou.mybatisplus.extension.service.IService;
import com.wsh.entity.Order;
import java.util.Collection;
public interface EasyService extends IService<Order> {
/**
* 批量插入,仅适用于 mysql
* @param orderList
* @return
*/
public Integer BatchSave(Collection<Order> orderList);
}
- 定义service接口的实现类
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wsh.mapper.EasyBaseMapper;
import com.wsh.mapper.EasyMapper;
import com.wsh.entity.Order;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collection;
@Service
public class EasyServiceImpl extends ServiceImpl<EasyMapper, Order> implements EasyService{
@Override
public Integer BatchSave(Collection<Order> orderList) {
return baseMapper.insertBatchSomeColumn(orderList);
}
}
7: 批量插入测试
import com.wsh.entity.Order;
import com.wsh.service.EasyServiceImpl;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
@SpringBootTest
public class TestEasyService {
@Resource
EasyServiceImpl easyService;
@Test
public void testBatchSave(){
long start = System.currentTimeMillis();
ArrayList<Order> orders = new ArrayList<>();
for (int i = 0; i < 100000; i++) {
Order order = new Order();
order.setName("hcy"+i);
order.setOrderDate(new Date());
orders.add(order);
}
Integer b = easyService.BatchSave(orders);
long end = System.currentTimeMillis();
System.out.println("保存时间为:" + (end - start));//6348 6093 4320
System.out.println(b);
}
}
mybatis-saveBatch方法:
自定义 batchSave 方法:
文章原作者:CSDN-大江东去wsh 文章原地址:blog.csdn.net/m0_48847558…