【Excel_To_DB】SpringBoot+EasyPoi+Redis消息队列实现Excel批量异步导入数据库(一)
【Excel_To_DB】SpringBoot+EasyPoi+Redis消息队列实现Excel批量异步导入数据库(二)
【Excel_To_DB】SpringBoot+EasyPoi+Redis消息队列实现Excel批量异步导入数据库(三)
【效果演示】:JavaWeb毕业设计项目-足球队管理系统(四)引入Excel_To_DB项目+源码
【码云地址】:https://gitee.com/ydc_coding
ExcelModel.java:
package com.ydc.excel_to_db.domain;
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
import javax.validation.constraints.Max;
import javax.validation.constraints.Pattern;
import java.util.Date;
/**
* @Description: 为了方便扩展,这里的字段命名规则为col[列]+1[列数]
* 例如:col1代表的就是第一列的数据,通过@Excel(name=?)注解进行区分
* @Author: 杨东川【http://blog.csdn.net/yangdongchuan1995】
* @Date: Created in 2018-2-6
*/
@Data
public class ExcelModel {
// 官方文档 http://easypoi.mydoc.io/
@Excel(name = "序号")
@NotBlank(message = "该字段不能为空")
@Max(value = 1000)
private String col1;
@Excel(name = "姓名")
@Pattern(regexp = "[\\u4E00-\\u9FA5]{2,5}", message = "姓名中文2-5位")
private String col2;
@Excel(name = "性别")
private String col3;
@Excel(name = "出生年月", format = "yyyy.MM.dd")
private Date col4;
@Excel(name = "民族")
private String col5;
@Excel(name = "籍贯")
private String col6;
@Excel(name = "文化程度")
private String col7;
@Excel(name = "参工时间", format = "yyyy.MM")
private Date col8;
@Excel(name = "政治面貌")
private String col9;
@Excel(name = "职务")
private String col10;
@Excel(name = "现处室时间", format = "yyyy.MM")
private Date col11;
@Excel(name = "任现职位时间", format = "yyyy.MM")
private Date col12;
@Excel(name = "任现职级时间", format = "yyyy.MM")
private Date col13;
@Excel(name = "职称")
private String col14;
@Excel(name = "执业资格")
private String col15;
@Excel(name = "进局时间", format = "yyyy.MM")
private Date col16;
@Excel(name = "实务导师")
private String col17;
@Excel(name = "备注")
private String col18;
public String getCol2() {
return col2;
}
}
说明:
- 这里使用了lombok的@Data注解与easypoi的@Excel注解,还有一些其他格式校验的注解。
- 这里我把字段名设置命名规则设置为col[列]+1[列数],例如:col1代表的就是第一列的数据,通过@Excel(name=?)注解进行区分。
为什么不直接写成例如姓名-username,性别-sex这类对应的中文含义的英文字母呢?
- 这是因为考虑到导入的数据是可变的,有可能这次需要将“全市审计人员花名册”导入数据库,下次就变换成将“审计机关全覆盖情况”导入数据库。
- 与其每次变动都更改字段名不如直接把字段名按一定规则设置好,后期只需要通过改变@Excel注解中的值就可以了,此外对应的Mapper中的sql语句也只需要更改操作对应数据库表的字段名即可。
Lombok与EasyPoi环境依赖:
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- easypoi -->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.0.3</version>
</dependency>
下面开始贴从上传Excel至返回第一层操作结果的代码及业务逻辑说明(Excel数据格式校验结果)
importExcel.html中上传方法js:
layui.use('upload', function () {
var $ = layui.jquery
, upload = layui.upload;
//拖拽上传
upload.render({
elem: '#test10'
, url: '/doImport/'
, method: 'post' //默认就是post
, accept: 'file'
, size: 20 * 1024
, before: function (obj) {
//obj参数包含的信息,跟 choose回调完全一致,可参见上文。
layer.load(); //上传loading
}
, done: function (res, index, upload) {
layer.closeAll('loading'); //关闭loading
//假设code=0代表上传成功
if (res.code == 0) {
// 0 : 上传文件格式通过
if (res.data.code == 0) {
//询问框
layer.confirm(res.data.msg, {
icon: 6,
title: '恭喜您,数据上传成功!',
btn: ['需要', '不需要'] //按钮
}, function () {
checkUndoSize();
}, function () {
layer.confirm('真的不需要查看数据同步结果吗?