本文介绍: 1.由于我们想每读取Excel中的N条记录后将这些记录全部写入数据库中。所以首先我们在Mybatis文件内先要写一个批量保存Excel文件中的记录的sql语句。4.创建相关Controller,通过getInputStream方法获取excel文件的数据流。在编写代码时,逻辑顺序为步骤1-2-3-4,但在实际调用时逻辑顺序为步骤4-3-2-1。2. 首先创建相应的实体类(对应Excel表中一个记录)的监听器。3.创建相关的服务类,读取Excel数据流的内容。
上一篇博客已经基本介绍了EasyExcel的配置与基本使用方法。现在准备使用EasyExcel将Excel文件保存至数据库。
1.由于我们想每读取Excel中的N条记录后将这些记录全部写入数据库中。所以首先我们在Mybatis文件内先要写一个批量保存Excel文件中的记录的sql语句。
<insert id="insertBatch">
insert into dict (
id ,
parent_id ,
name ,
value ,
dict_code
) values
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.id} ,
#{item.parentId} ,
#{item.name} ,
#{item.value} ,
#{item.dictCode}
)
</foreach>
</insert>
随后在Mapper接口中定义insertBatch方法。
public interface DictMapper extends BaseMapper<Dict> {
void insertBatch(List<ExcelDictDTO> list);
}
2. 首先创建相应的实体类(对应Excel表中一个记录)的监听器。
@Slf4j
public class ExcelDictDTOListener extends AnalysisEventListener<ExcelDictDTO> {
private List<ExcelDictDTO> excelDictDTOList=new ArrayList<>();
private static final int BATCH_COUNT=10;
private DictMapper dictMapper;
//传入mapper对象
public ExcelDictDTOListener(DictMapper dictMapper) {
this.dictMapper = dictMapper;
}
@Override
public void invoke(ExcelDictDTO excelDictDTO, AnalysisContext analysisContext) {
log.info("data:{}",excelDictDTO);
excelDictDTOList.add(excelDictDTO);
if(excelDictDTOList.size()>=BATCH_COUNT){
saveData();
excelDictDTOList.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
// 不足BATCH_COUNT数的记录在这里存储
if(excelDictDTOList.size()>0)saveData();
log.info("所有数据解析完成!");
}
private void saveData() {
log.info("{}条数据,开始存储数据库!", excelDictDTOList.size());
// 批量插入
dictMapper.insertBatch(excelDictDTOList);
log.info("存储数据库成功!");
}
}
3.创建相关的服务类,读取Excel数据流的内容。
@Service
public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements DictService {
@Transactional
@Override
public void importDictDataByExcel(InputStream inputStream){
EasyExcel.read(inputStream, ExcelDictDTO.class,new ExcelDictDTOListener(dictMapper)).sheet().doRead();
}
}
4.创建相关Controller,通过getInputStream方法获取excel文件的数据流。
@Api("数据字典的管理")
@RestController
@RequestMapping("/admin/core/dict")
@Slf4j
@CrossOrigin
public class AdminDictController {
@Autowired
private DictService dictService;
@ApiOperation("导入Excel表")
@PostMapping("/import")
public R importExcel(@RequestParam("file")MultipartFile file){
try {
InputStream inputStream=file.getInputStream();
dictService.importDictDataByExcel(inputStream);
return R.ok().message("导入成功");
}catch (Exception e){
throw new BusinessException(ResponseEnum.UPLOAD_ERROR,e);
}
}
}
在编写代码时,逻辑顺序为步骤1-2-3-4,但在实际调用时逻辑顺序为步骤4-3-2-1。
原文地址:https://blog.csdn.net/qq_45007794/article/details/135772489
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_62395.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。