insertBatchSomeColumn 实现批量导入
1.先配置 sql 注入器 ,新建一个 BatchSqlInjector 类继承 DefaultSqlInjector ;
public class BatchSqlInjector extends DefaultSqlInjector {
@Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
List<AbstractMethod> methodList = super.getMethodList(mapperClass);
// 可以排除部分插入的字段,直接采用数据库默认值
methodList.add(new InsertBatchSomeColumn());
return methodList;
}
}
2.向spring容器中注入该bean
@Bean
public BatchSqlInjector batchSqlInjector () {
return new BatchSqlInjector();
}
3.新增一个 mapper(dao) 文件,继承原 BaseMapper 用于拓展原先的基类,
@SqlParser(filter=true)
public interface BatchOrderItemDAO<OrderItemPO> extends BaseMapper<OrderItemPO> {
// 批量导入方法
int insertBatchSomeColumn(List<OrderItemPO> entityList);
}
4.使用方法
public Integer insertBatchSomeColumn(List<OrderItemCreateDTO> orderItemDTOS) {
List<OrderItemPO> orderItemPOS = BeanUtil.copyToList(orderItemDTOS, OrderItemPO.class);
return getBaseMapper().insertBatchSomeColumn(orderItemPOS);
}
5.上面的配置为整表 - 全字段的批量导入,需求:排除部分字段不进行导入。
写法:
methodList.add(new InsertBatchSomeColumn(i ->
!i.getColumn().equals("xx_field")
&& !i.getColumn().equals("xx_field")
);