一、自定义一个SqlInjector继承DefaultSqlInjector
package cn.boccaccio.realdataprovider.thirdparty.config;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
import java.util.List;
public class MySqlInjector extends DefaultSqlInjector {
@Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
List<AbstractMethod> methodList = super.getMethodList(mapperClass,tableInfo);
methodList.add(new InsertBatchSomeColumn());//添加批量插入方法
return methodList;
}
}
注入bean
@Configuration
public class MybatisPlusConfig {
@Bean
@Primary//批量插入配置
public MySqlInjector mySqlInjector() {
return new MySqlInjector();
}
}
继承BaseMapper<>,添加insertBatchSomeColumn方法
public interface DeviceDao extends BaseMapper<Device> {
/**
* 批量插入 仅适用于mysql
*
* @param entityList 实体列表
* @return 影响行数
*/
Integer insertBatchSomeColumn(Collection<Device> devices);
}
service层使用
@Service
public class DeviceService extends ServiceImpl<DeviceDao, Device> {
@Autowired
private DeviceDao deviceDao;
@Transactional
public Integer addDevices(List<Device> devices) {
if (CollUtil.isEmpty(devices)){
return 0;
}
if (deviceDao.insertBatchSomeColumn(devices)>0){
return devices.size();
}else {
return 0;
}
}
}
数据源url后面加上&rewriteBatchedStatements=true
此时就实现了正真的批量插入。