最近工作涉及将excel中的数据导入到MySQL数据库,由于Excel中数据并不规范,需要进行二次加工。将excel中数据加工后,通过mybatis批量插入mySQL数据库,其相关联的技术点比较简单,经过半天的编写,算是把任务完成了。但测试时性能太差,处理2W条数据的excel文件需要将近两分钟,后来在网上了解到了通过load data infile的方式,让数据库去加载csv数据文件,效率能提高几十倍,所以小可打算尝试一下,最终效果真的很不错,加载5W条数据的excel文件时间可以控制在6秒以内【小可已经很满足了】,应该还可以优化,但是限于小可的能力,先把完成的工作做一个总结,也算是一个分享吧。
编程语言:Java
平台框架:Spring、Spring MVC、MyBatis
解析Excel:Apache POI
生成CSV:Apache commons-csv
一、解析excel
Workbook workBook = parseExcelGetWorkbook(is,fileName);
Sheet sheet = workBook.getSheetAt(0);
int rowsNum = sheet.getPhysicalNumberOfRows();
List<List<String>> resultList = Lists.newArrayList();
Row rootRow = sheet.getRow(0);
int cellsNum = rootRow.getPhysicalNumberOfCells();
for(int j=1;j<rowsNum;j++){
Row row = sheet.getRow(j);
List<String> list = new ArrayList<String>();
for(int i=0;i<cellsNum;i++){
Cell cell = row.getCell(i);
if(cell!=null){
cell.setCellType(Cell.CELL_TYPE_STRING);
list.add(StringUtils.noNull(cell.getStringCellValue()));
}else{
list.add("");