EasyExcle的使用
1.导入pom依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
2.controller
public void importExcel1(MultipartFile excel, HttpServletRequest request, HttpServletResponse response) throws Exception {
InputStream inputStream = excel.getInputStream();
Sheet sheet = new Sheet(1,1,Relic.class);
EasyExcelFactory.readBySax(inputStream,sheet,excelModelListener);
}
3.监听器
package com.wx.collection_management_server.utils;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.wx.collection_management_server.entity.Relic;
import com.wx.collection_management_server.mapper.RelicMapper;
import com.wx.collection_management_server.mapper.RelicYearsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class ExcelModelListener extends AnalysisEventListener {
@Autowired
RelicMapper relicMapper;
private static final int BATCH_COUNT = 3000;
List<Relic> list = new ArrayList<Relic>();
private static int count = 1;
@Override
public void invoke(Relic data, AnalysisContext context) {
System.out.println("解析到一条数据:{ "+ data +" }");
list.add(data);
count ++;
if (list.size() >= BATCH_COUNT) {
saveData( count );
list.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
saveData( count );
System.out.println("所有数据解析完成!");
System.out.println(" count :" + count);
}
/**
* 数据库阶段
*/
private void saveData(int count) {
System.out.println("{ "+ count +" }条数据,开始存储数据库!" + list.size());
System.out.println("存储数据库成功!");
list.remove(0);
list.remove(list.size()-1);
for (Relic demoData : list) {
System.out.println(demoData);
if(demoData.getOldName()==null || "".equals(demoData.getOldName())){
demoData.setOldName(demoData.getName());
}
if(demoData.getRegistrationNumber().contains("*")){
continue;
}
relicMapper.batchSave(demoData);
}
}
}
4.实体类属性加上 @ExcelProperty(value = “xxx”,index = 2)
index 为导入excle表格中列的索引 对应传入的实体类的属性