springboot结合阿里巴巴easyexcel,实现一键把Excel数据导入数据库
技术说明:
springboot:2.1.4.RELEASE
jQuery
Ajax
mysql:8.0.32
作业背景
我现在有个Excel表,里面有1000行数据,我不可能一个个录入数据库的,必须使用一键导入Excel,实现全部自动导入数据库。接下来就是实现这个功能的额,
pom.xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>4.0.2</version>
</dependency>
如下实体类,每个字段上面加入对应的注解,如下代码:@ExcelProperty(value = "序号",index = 0),value的值,如果Excel表的表头,跟字段属性名称一致,可以不写。否则value的值,以Excel字段为准。index的值,就是你Excel表头的位置。第一个就是0开始,全部一一匹配即可,如果某个Excel表头不需要导入,使用@ExcelIgnore忽略
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BossDo implements Serializable {
//序号
@ExcelProperty(value = "序号",index = 0)
private Integer id;
//面试时间
@ExcelProperty(value = "面试时间",index = 1)
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
private Date interviewTime;
//面试者姓名
@ExcelProperty(value = "姓名",index = 2)
private String name;
//性别
@ExcelProperty(value = "性别",index = 3)
private String sex;
//手机号
@ExcelProperty(value = "手机号码",index = 4)
private String phoneNumber;
//年龄
@ExcelProperty(value = "年龄",index = 5)
private String age;
//是否通过
@ExcelProperty(value = "是否通过",index = 6)
private String pass;
//是否试岗
@ExcelProperty(value = "是否试岗",index = 7)
private String trial;
//是否入职
@ExcelProperty(value = "是否入职",index = 8)
private String state;
//邀约人
@ExcelProperty(value = "面试邀约人",index = 9)
private String belong;
//备注
//@ExcelIgnore
@ExcelProperty(value = "备注",index = 10)
private String other;
}
创建导入的方法
说明:Ajax前端发起一个请求,请求地址是importExcel,我这里没有贴前段的代码,因为我当时就是测试,所以没有写。前段可以写一个上传的按钮来实现就可以了
@RequestMapping("/importExcel")
@ResponseBody
public CommonReturnType importExcel(HttpServletResponse response) {//CommonReturnType 这个是我自定义的返回数据的格式,你也可以直接返回string类型的字符串,"ok"
//创建一个集合储存读取的数据
List<BossDo> list = ListUtils.newArrayList();//BossDo这里对应你的实体类
String fileName="C:\\Users\\86199\\Desktop\\到面统计表.xlsx";//这里是你本地Excel的路径
EasyExcel.read(fileName, BossDo.class,
new AnalysisEventListener<BossDo>() {
/**
* 解析每一条数据的时候被调用
*/
@Override
public void invoke(BossDo data, AnalysisContext context) {
//在这里操作,将解析的每一条数据保存到数据库中,在这里可以调用数据库
System.out.println("解析的数据为: "+data);
list.add(data);//解析每一条数据,保存到上述list集合
}
/**
* 解析完所有数据的时候被调用
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
for(BossDo bossDo : list) {
bossService.insertBoss(bossDo);//这里是从list集合中,把每一条数据保存到数据库; bossService.insertBoss是我业务侧保存数据的方法
}
}
}).sheet().doRead();
return CommonReturnType.success();
}


浙公网安备 33010602011771号