EasyExcel 是来自alibaba的一个优秀的读写Excel工具。相比同一作用的POI,EasyExcel的性能以及稳定性更加优秀,并且EasyExcel正常情况下不会出现内存溢出的情况。
github:
https://github.com/alibaba/easyexcel
官网:
https://www.yuque.com/easyexcel/doc/easyexcel
MyGithub Demo: (欢迎点star)
https://github.com/wingshu/ReadWriteExcel/tree/master
引入EasyExcel相关依赖
构建对应实体类
构建EasyExcel “读” 流程
构建EasyExcel“写”流程
引入POM相关依赖 (其他依赖参考MyGithub ReadWriteExcel Demo的POM文件)
<dependency>
<groupId>com.alibabagroupId>
<artifactId>easyexcelartifactId>
<version>2.2.6version>
dependency>
构建对应实体类
这里就以一个Student 实体类 为例
@Data //lombok插件 作用 自动构建getter,setter
public class Student {
@ExcelProperty("学号")
@ColumnWidth(6) //列宽
private int studentId;
@ExcelProperty("姓名")
@ColumnWidth(8)
private String studentName;
@ExcelProperty("电话")
@ColumnWidth(8)
private String phone;
}
读取Excel数据:(将Excel文件中已按照Student实体类设置的字段规则,进行读取数据,返回值为List。)
读操作的监听器
public class StudentListenr extends AnalysisEventListener<Student> {
private static final Logger LOGGER = LoggerFactory.getLogger(StudentListenr.class);
/**
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
*/
private static final int BATCH_COUNT = 5;
List<Student> list = new ArrayList<Student>();
private Student demoDAO;
public StudentListenr() {
// 这里是demo,所以随便new一个。实际使用如果到了spring,请使用下面的有参构造函数
demoDAO = new Student();
}
public StudentListenr(Student demoDAO) {
this.demoDAO = demoDAO;
}
@Override
public void invoke(Student student, AnalysisContext analysisContext) {
System.out.println("解析到一条数据:"+JSON.toJSONString(student));
list.add(student);
// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
if (list.size() >= BATCH_COUNT) {
saveData();
// 存储完成清理 list
list.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
//数据存储
saveData();
System.out.println(("所有数据解析完成!"));
}
/**
* 加上存储数据库
*/
private void saveData() {
System.out.println(list.size()+"条数据,可进行数据库存储!");;
System.out.println((Arrays.toString(new List[]{list})));
System.out.println("数据处理完毕");
}
}
Excel数据存储方式 Map 或者 实体类
/*
读取Excel文档数据
*/
@Test
void contextLoads() {
// ExcelReaderBuilder read = EasyExcel.read("D://xsmEasyExcelTest.xlsx", Student.class, new StudentListenr());
// ExcelReaderSheetBuilder sheet = read.sheet();
// sheet.doRead();
//一行搞定版,其他详细的读取文档操作可参考官网读Excel相关文档
EasyExcel.read("D://xushuminEasyExcelTest.xlsx", Student.class, new StudentListenr()).sheet().doRead();
}
写操作Excel: (将Student实体类数据通过Excel保存起来)
/*
写操作Excel文档
*/
@Test
public void writeExcel(){
Student student = new Student();
student.setStudentId(3);
student.setStudentName("xushumin");
student.setPhone("123");
List<Student> list = new ArrayList<Student>();
list.add(student);
ExcelWriterBuilder write = EasyExcel.write("D://xsmEasyExcelTest.xlsx", Student.class);
write.sheet().doWrite(list);
}
以上有任何不明白的地方均可在下方评论区评论,欢迎大家前来评论。EasyExcel是目前较为流行的针对Excel的解析工具,可用于实现Excel的导入导出任务,在后续的文章中将详细讲解关于Excel导入导出前后端的实现逻辑。
Integer和int的区别?在什么时候用Integer和什么时候用int
例子
区别:Integer 默认值为null,int 默认值为 0 。 在遇到像考试成绩表达的时候,null 表示学生未参加考试,0表示学生成绩为0 ,所以在此场景时 使用Integer更加适合。同理EL表达式 也使用Integer。
相应的Integer的缺点在于,在进行加减乘除时 ,需要拆箱装箱耗费性能。
xushumin:让复杂的事情简单做,简单的事情快速做。