当前位置:   article > 正文

Spring Boot使用EasyExcel导入导出Excel_easyexcel.read(file.getinputstream(),sysuser.class

easyexcel.read(file.getinputstream(),sysuser.class import.class,

一、导入依赖

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>easyexcel</artifactId>
  4. <version>2.1.6</version>
  5. </dependency>

二、实现导出excel操作

1、对我们需要导出的实体类上加上注解,如下:

  1. @ExcelProperty("商品编号")
  2. private Integer gid;
  3. @ExcelProperty("商品名称")
  4. private String gname;
  5. @ExcelProperty("商品价格")
  6. private Float gprice;
  7. @ExcelProperty("商品购买数量")
  8. private Integer buynum;
  9. @ExcelProperty("商品库存")
  10. private Integer gnum;
  11. //导出图片格式如下(照片路径一定是要真实路径,不然会报错)
  12. //@ExcelProperty(value = {"商品图片"},converter = StringImageConverter.class)
  13. //忽略导入
  14. //@ExcelIgnore
  15. @ExcelProperty("商品图片")
  16. private String gpic;

2、编写的具类--帮助我们来实现下载excel

  1. public class DownExcel {
  2. public static void download(HttpServletResponse response, Class t, List list) throws IOException, IllegalAccessException,InstantiationException {
  3. response.setContentType("application/vnd.ms-excel");// 设置文本内省
  4. response.setCharacterEncoding("utf-8");// 设置字符编码
  5. response.setHeader("Content-disposition", "attachment;filename=demo.xlsx"); // 设置响应头
  6. EasyExcel.write(response.getOutputStream(), t).sheet("模板").doWrite(list); //用io流来写入数据
  7. }
  8. }

3、编写控制器

  1. //导出为Excel
  2. @RequestMapping("/downloadexcel.do")
  3. public void getExcel(HttpServletResponse response) throws IllegalAccessException, IOException,
  4. InstantiationException {
  5. List<SysUser> list = sysUserService.getAll();
  6. DownExcel.download(response,SysUser.class,list);
  7. }

4、直接访问接口或用postman(http://localhost:8080/userctrl/downloadexcel.do)下载excel,excel如图所示:

三、实现导入excel操作

1、在mybatis的mapper里面添加一个接口(保存集合,实现批量导入)

int saveAll(List<SysUser> sysUsers);

xml如图所示:

  1. <insert id="saveAll" parameterType="java.util.List">
  2. insert into sys_user (name,nick_name,avatar,password,salt,email,mobile,status,dept_id,create_by,create_time,last_update_by,last_update_time)
  3. values
  4. <foreach collection="list" item="item" index="index" separator=",">
  5. (
  6. #{item.name},
  7. #{item.nickName},
  8. #{item.avatar},
  9. #{item.password},
  10. #{item.salt},
  11. #{item.email},
  12. #{item.mobile},
  13. #{item.status},
  14. #{item.deptId},
  15. #{item.createBy},
  16. #{item.createTime},
  17. #{item.lastUpdateBy},
  18. #{item.lastUpdateTime}
  19. )
  20. </foreach>
  21. </insert>

2、创建service和service实现类,如下:

void saveList(List<SysUser> list);
  1. @Override
  2. public void saveList(List<SysUser> list) {
  3. sysUserMapper.saveAll(list);
  4. }

3、导入数据的时候需要对这个进行监听,所以也需要写一个工具类,来帮忙我们处理这些数据,代码如图:

  1. // 有个很重要的点 ExcelListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
  2. public class ExcelListener extends AnalysisEventListener<SysUser> {
  3. private List<SysUser> list = new ArrayList<>();
  4. /**
  5. * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
  6. */
  7. private static final int BATCH_COUNT = 5;
  8. /**
  9. * 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。
  10. */
  11. private SysUserService sysUserService;
  12. /**
  13. * 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来
  14. */
  15. public ExcelListener(SysUserService sysUserService) {
  16. this.sysUserService = sysUserService;
  17. }
  18. /**
  19. * 这个每一条数据解析都会来调用
  20. */
  21. @Override
  22. public void invoke(SysUser goods, AnalysisContext analysisContext) {
  23. System.out.println("解析到一条数据:========================"+goods.toString());
  24. // 数据存储到datas,供批量处理,或后续自己业务逻辑处理。
  25. list.add(goods);
  26. // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
  27. if(list.size() >= BATCH_COUNT){
  28. saveData();
  29. // 存储完成清理datas
  30. list.clear();
  31. }
  32. }
  33. /**
  34. * 所有数据解析完成了 都会来调用
  35. */
  36. @Override
  37. public void doAfterAllAnalysed(AnalysisContext analysisContext) {
  38. saveData();//确保所有数据都能入库
  39. }
  40. /**
  41. * 加上存储数据库
  42. */
  43. private void saveData() {
  44. System.out.println("=============================="+list.size()+"条数据,开始存储到数据库");
  45. sysUserService.saveList(list);
  46. }
  47. }

4、控制器添加导入操作代码

  1. //导入Excel
  2. @RequestMapping("/importexcel.do")
  3. @ResponseBody
  4. public String importexcel(@RequestParam(value = "excelFile") MultipartFile file) throws IOException{
  5. EasyExcel.read(file.getInputStream(), SysUser.class, new ExcelListener(sysUserService)).sheet().doRead();
  6. return "success";
  7. }

5、使用页面导入或者使用postman调用(http://localhost:8080/userctrl/importexcel.do)

  1. <h2>
  2. <form action="../userctrl/importexcel.do" method="post" enctype="multipart/form-data">
  3. 导入Excel:<input type="file" name="excelFile" accept=".xls,.xlsx">
  4. <input type="submit" value="提交">
  5. </form>
  6. </h2>

6、提交后数据库数据增加,如图所示:

 资源下载:https://download.csdn.net/download/qq_37284798/87274449

 百度网盘

 链接:https://pan.baidu.com/s/1pd0SfhnDvKsXfa5fQjeMFw 
 提取码:fpbt 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/321538
推荐阅读
相关标签
  

闽ICP备14008679号