SpringBoot使用easyExcel导入导出Excel文件
一、项目原因
最近公司业务上有导入导出Excel的需求,自己有点看不懂,于是上网看了一些大神的思路,学会了一些,给大家分享一下。
二、项目的思路
Excel导入
- 浏览文件夹,选择需要上传的文件
- 将本地文件上传至服务器指定位置
- 服务器解析Excel文件
- 将Excel中解析的数据存入数据库中
Excel导出
- 设定查询条件
- 数据库中查询相应的数据
- 将数据写入Excel
- 将Excel下载至本地
这里建议小伙伴们使用Postman去测试接口
三、项目搭建
先来个三连击
依赖,其余的依赖想看的要去git上,末尾有
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
今天的重点,同学们记上小本本
还有一些其他的依赖就不一一贴出来了…
项目的整体结构如下:
为了迅猛一点(偷懒),使用Easy Code
IDEA连接数据库,我这使用mysql8,mysql5的小伙伴建议虚拟机下个docker弄个mysql5(方便)
开始偷懒
实体类数据层业务层一下弄好,可能有小瑕疵,自己搞搞,你行的!
四、具体代码
配置文件
server.port=8088
#database
spring.datasource.url=jdbc:mysql://localhost:3306/test?&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#mybatis
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.glaway.excel.entity
web层
@RestController
@RequestMapping(value = "/easyExcel")
public class UserController {
private static final Logger LOGGER = LoggerFactory.getLogger(ExcelListener.class);
/**
* 服务对象
*/
@Resource
private UserService userService;
@PostMapping(value = "/import")
public ReturnT read(MultipartFile excel) {
List<User> userList = ExcelUtil.readExcel(excel, User.class, 0);
//for循环遍历赋予每个user一个随机id
for (User user : userList) {
user.setId(UUIDGenerator.generate());
}
userService.saveEasyExcelData(userList);
return new ReturnT().setMsg("Excel import successful").setSuccess(true).setResult(true);
}
@GetMapping(value = "/export")
public ReturnT writeExcel(HttpServletResponse response) {
List<User> list = getList();
String fileName = UUIDGenerator.generate();
String sheetName = "sheet";
ExcelUtil.writeStyleExcel(response, list, fileName, sheetName, User.class);
return new ReturnT().setMsg("Excel export successful").setSuccess(true).setResult(true);
}
private List<User> getList() {
List<User> userList = userService.queryAll(new User());
//根据创建时间降序排序
userList.sort(Comparator.comparing(User::getCreateTime).reversed());
LOGGER.info("all excel data parsed, count:{}", userList.size());
return userList;
}
}
mapper
<insert id="saveEasyExcelData">
INSERT INTO test.user(ID,NAME, SEX, AGE,
CREATE_TIME, STATUS)
VALUES
<foreach collection="userList" item="userList" separator=",">
(
#{userList.id, jdbcType=VARCHAR},
#{userList.name, jdbcType=VARCHAR},
#{userList.sex, jdbcType=INTEGER},
#{userList.age, jdbcType=INTEGER},
#{userList.createTime},
#{userList.status, jdbcType=INTEGER}
)
</foreach>
</insert>
dao
void saveEasyExcelData(@Param("userList") List<User> userList);
serice
void saveEasyExcelData(List<User> userList);
service.impl(记得加@Service注解)
@Override
public void saveEasyExcelData(List<User> userList) {
userDao.saveEasyExcelData(userList);
}
给启动类加扫描
@MapperScan(basePackages = "com.glaway.excel.dao")
还有一些工具类去我的git上瞅瞅(Ctrl C Ctrl V)
五、项目演示
导出
Excel直接输入网址按下回车
效果
导入
这边建议先导出然后使用模板再导入
六、总结
项目已经上传到git地址:点击传送