前后端实现导出导入功能

目录

导出

1.后端代码

(1)相关依赖

(2)自定义实体类

(3)写一个查询方法list

(4)写导出接口

2.前端代码

3.效果示例

 导入

1.后端代码

(1)写导入接口

2.前端代码

3.效果示例


导出

1.后端代码

(1)相关依赖

        
        
            cn.hutool
            hutool-all
            5.8.0
        
        
        
            org.apache.poi
            poi-ooxml
            5.2.2
        

(2)自定义实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("person")
public class Person {

    @TableId(type = IdType.AUTO)
    @Column(name = "id")
    private Long Id;
    @Alias("用户名")
    private String name;
    @Alias("性别")
    private String gender;
    @Alias("年龄")
    private Integer age;
    @TableField(exist = false)
    private List ids;

    public Person(List ids) {
        this.ids = ids;
    }

}

注意:这里要加@Alias注解,是因为当我们要进行导入操作时,会因为xls中表名和字段是中文而无法导入数据库,因此这时需要作别名设置        

(3)写一个查询方法list

这里有很多方式,因为本章是聚焦在导入导出功能上,所以查询可以用通用Mapper或者MyBatis-plus提供好的方法都可以,我这里是自己写的,这里就不解释了

@Mapper
public interface PersonMapper extends BaseMapper{

    List selectPersonList(Person person);

}

(4)写导出接口

    @GetMapping("/export")
    public void export(HttpServletResponse response) throws IOException {
        //先从数据库查出所有的数据
        List list = personService.selectPersonList2();
        //我们创建Hutool给我们写好的ExcelWrite
        ExcelWriter wirter = ExcelUtil.getWriter(true);
        wirter.write(list, true);
        //我们将输出的excel文件写出到客户端直接下载
        //response为HttpServletResponse对象
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
//        response.setHeader("Content-Disposition","attachment;filename=test.xls");
        String fileName = URLEncoder.encode("用户相关信息", "UTF-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
        ServletOutputStream out = response.getOutputStream();
        wirter.flush(out, true);
        //关闭wirter,释放内存
        wirter.close();
        //关机输出servlet流
        IoUtil.close(out);

    }

2.前端代码



3.效果示例

 前后端实现导出导入功能_第1张图片

前后端实现导出导入功能_第2张图片

 导入

1.后端代码

(1)写导入接口

    @PostMapping("/import")
    public boolean imp(MultipartFile file) throws IOException {
        //获取来自浏览器发送的文件内容
        InputStream inputStream = file.getInputStream();
        //这里我们不用磁盘路径这种写死的,我们使用输入流动态进行读取
//        ExcelReader reader = ExcelUtil.getReader("读取文件来源");
        ExcelReader reader = ExcelUtil.getReader(inputStream);
        List all = reader.readAll(Person.class);
        //我们再使用MP的批量插入插入到数据库中即可
        personService.saveBatch(all);
        return true;
    }

2.前端代码



3.效果示例

 假设将下列表导入

前后端实现导出导入功能_第3张图片

 看后台数据库

前后端实现导出导入功能_第4张图片 

可以看到数据库被添加了进来,而且主键因为设置了自增属性,不会被xls表中的id号所影响 

你可能感兴趣的:(Springboot,spring,boot,java,后端,vue.js,elementui)