ps:博主测试的60w数据是没问题的
pom.xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
一、Controller
@RequestMapping(value = "importExcel", method = RequestMethod.POST, headers = "content-type=multipart/form-data")
@ApiOperation(value = "导入社区")
@ApiImplicitParams({ @ApiImplicitParam(name = "文件", value = "file") })
public Result importExcel(@RequestParam(value="file") MultipartFile file) throws ControllerException {
try {
Result result = communityService.importExcel(file);
return result;
} catch (Exception e) {
return Result.failed("导入失败");
}
}
二、实体类
/**
* 社区信息
*
* @author LXF
* @email
* @date 2021-11-10 15:29:38
*/
@Data
public class Community implements Serializable {
private static final long serialVersionUID = 1L;
@JsonSerialize(using = ToStringSerializer.class)
@TableId(value = "ID", type = IdType.AUTO)
private Long id;//
private String nation;// 国家
private String province;// 省市
private String city;
private String county;// 区县
private String town;// 镇
private String community;// 村民委员会
private String village;// 社区(村)
private String address;// 地址
private String headImgUrl;// 头像
private String telephone;// 电话
private String contact;// 联系人
private String content;// 简介
@JsonSerialize(using = ToStringSerializer.class)
private Long userId;// 用户编号
private String dmsAccount;// dms账号
private String workAccount;// 工作号
private Integer enabled;// 是否启用:1启用,0屏蔽
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;// 创建时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;// 最近一次更新时间
@JsonSerialize(using = ToStringSerializer.class)
private Long operatorId;// 操作者
private String operateIp;// 最近一次更新操作的网址
@JsonSerialize(using = ToStringSerializer.class)
private Long version;// 版本号
}
@Data
public class CommunityImportBo implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
@ExcelProperty("国家")
private String nation;
@ExcelProperty("省")
private String province;
@ExcelProperty("市")
private String city;
@ExcelProperty("区县")
private String county;
@ExcelProperty("乡镇街道")
private String town;
@ExcelProperty("居委会")
private String community;
}
三、Service
/**
* 导入社区excel
*
* @param file 文件
* @param
* @return {@link Result}
*/
Result importExcel(MultipartFile file) throws ServiceException, IOException;
四、ServiceImpl
/**
* 导入社区excel
*
* @param file 文件
* @param
* @return {@link Result}
*/
@Override
public Result importExcel(MultipartFile file) throws ServiceException, IOException {
// 写法1:JDK8+ ,不用额外写一个DemoDataListener
// since: 3.0.0-beta1
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
// 这里每次会读取3000条数据 然后返回过来 直接调用使用数据就行
//还有几种写法具体参照官网给的demo,大同小异
EasyExcel.read(file.getInputStream(), CommunityImportBo.class, new PageReadListener<CommunityImportBo>(dataList -> {
Community community = new Community();
community.setUserId(Long.valueOf("1277137734524300032"));
community.setEnabled(1);
community.setCreateTime(new Date());
List<Community> list = new ArrayList<>();
for (CommunityImportBo demoData : dataList) {
BeanUtil.copyProperties(demoData,community);
list.add(community);
}
communityDao.insertBatchTwo(list);
})).sheet().doRead();
return Result.succeed("导入成功");
}
}
五、Dao
//返回主键
@Options(useGeneratedKeys=true,keyProperty="id")
void insertBatchTwo(List<Community> list);
六、Dao.xml
<insert id="insertBatchTwo" parameterType="java.util.List">
insert into community(
nation,
province,
city,
county,
town,
community,
village,
address,
head_img_url,
telephone,
contact,
content,
user_id,
dms_account,
work_account,
enabled,
create_time,
update_time,
operator_id,
operate_ip,
version)
values
<foreach collection="list" item="item" index="index" separator=",">
(
#{ item.nation},
#{ item.province},
#{ item.city},
#{ item.county},
#{ item.town},
#{ item.community},
#{ item.village},
#{ item.address},
#{ item.headImgUrl},
#{ item.telephone},
#{ item.contact},
#{ item.content},
#{ item.userId},
#{ item.dmsAccount},
#{ item.workAccount},
#{ item.enabled},
#{ item.createTime},
#{ item.updateTime},
#{ item.operatorId},
#{ item.operateIp},
#{ item.version}
)
</foreach>
</insert>
个人博客:
码农日志分享互联网知识,码农日志,博客,开发者,程序猿,编程,代码,开源,IT网站,Java,JavaWeb,Java常用框架,Spring,SpringBoot,SpringMVC,MyBatis,数据库,MySQL,C#,.NET,开发工具,Git,GitHub,Gitee,(My)Eclipse,IDEA, Hexo,Linux,Maven,前端基础知识,HTML,CSS,JavaScript,jQuery,Ajax,Bootstraphttp://lixiaofang.top/