总所周知,mybatisplus 的saveBatch()是一个伪批量插入,性能比较差。真实的批量插入需要for循环读取value 拼装成一条insert语句才插入。下面我将简单的介绍 使用mybatisplus实现真实的批量的步骤。
1.引入依赖,3.4.0之上的版本都可以
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
2.新建InsertBatchSqlInjector 类
@Component
public class InsertBatchSqlInjector extends DefaultSqlInjector {
@Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
List<AbstractMethod> methodList = super.getMethodList(mapperClass);
methodList.add(new InsertBatchSomeColumn());
return methodList;
}
}
3.创建CustomBaseMapper接口
public interface CustomBaseMapper<T> extends BaseMapper<T> {
/**
* 批量插入
* @param entityList 要插入的数据
* @return 成功插入的数据条数
*/
int insertBatchSomeColumn(List<T> entityList);
}
4.把CustomBaseMapper当成BaseMapper使用即可
需要在dao层或mapper层去继承CustomBaseMapper,如:
public interface TStudentDao extends CustomBaseMapper
5.通过basemapper使用即可
this.baseMapper.insertBatchSomeColumn(studentEntityList);
或者直接注入
@Autowired
TStudentDao studentDao
studentDao.insertBatchSomeColumn(studentEntityList);
最终配置sql日志,即可看到效果
mybatis:
#mapper配置文件
mapper-locations: classpath:mapper/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
日志
可以看到一条sql更新了两个记录