1.控制层
@PostMapping("/importData") public Result importDict(MultipartFile file) { String s= dictService.importDictData(file); return Result.ok(s); }
2.业务层:
@Override @CacheEvict(value = "dict", allEntries=true) public String importDictData(MultipartFile file) { try { ExcelReadListener<DictEeVo> listener = new ExcelReadListener<DictEeVo>(); EasyExcel.read(file.getInputStream(),DictEeVo.class,listener).sheet().doRead(); List<DictEeVo> lists = listener.getList(); for (DictEeVo list : lists) { if (list.getName()==null){ return "姓名不可以为空"; } } } catch (IOException e) { e.printStackTrace(); } return "挺好的"; }
3.监听器
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson.JSON; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; public class ExcelReadListener<T> extends AnalysisEventListener<T> { private Logger logger = LoggerFactory.getLogger(this.getClass()); /** * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收 */ List<T> list = new ArrayList<>(); public List<T> getList() { return list; } public void setList(List<T> list) { this.list = list; } // private <Tservice> Tservice; /* public ExcelListener(<K> service) { this.service = service; }*/ @Override public void invoke(T t, AnalysisContext analysisContext) { logger.info("解析到一条数据:{}", JSON.toJSONString(t)); list.add(t); /* if (list.size() >= BATCH_COUNT) { saveData(); // 存储完成清理 list list.clear(); }*/ } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { // 这里也要保存数据,确保最后遗留的数据也存储到数据库 logger.info("{}条数据,开始存储数据库!", list.size()); logger.info("所有数据解析完成!"); //logger.info("所有数据解析完成!"); } /** * 加上存储数据库 */ }
4.excel中的bean和对应数据库里的bean
5.结果