SpringBoot导入导出数据实现方法详解

SpringBoot导入导出数据实现方法详解

在开发Web应用程序时,数据的导入和导出是一项核心功能。SpringBoot提供了多种方式来实现数据的导入和导出,本文将详细介绍其中常用的两种方式。

基于EasyPOI实现Excel导入和导出

EasyPOI是一个简单易用的Java Excel操作库,它提供了丰富的API和自定义标签来快速创建Excel文件。下面是在SpringBoot项目中使用EasyPOI进行Excel导入和导出的步骤。

导出Excel

  1. 添加依赖
<dependency>
  <groupId>cn.afterturn</groupId>
  <artifactId>easypoi-base</artifactId>
  <version>5.5.0</version>
</dependency>
  1. 创建Excel模板
public class ExportUserInfoVO {
    @Excel(name = "序号", orderNum = "0", width = 15)
    private Integer id;

    @Excel(name = "姓名", orderNum = "1", width = 20)
    private String name;

    @Excel(name = "年龄", orderNum = "2", width = 15)
    private Integer age;

    // 省略getters和setters
}
  1. 实现导出接口
@GetMapping("/exportUserInfo")
public void exportUserInfo(HttpServletResponse response) throws IOException {
    List<UserInfo> userList = userInfoService.getAllUserInfo();
    List<ExportUserInfoVO> voList = userList.stream().map(ConvertUtil::convert).collect(Collectors.toList());

    Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), ExportUserInfoVO.class, voList);

    response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + new String("用户信息导出.xlsx".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
    response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);

    workbook.write(response.getOutputStream());
}

这里的ConvertUtil是自己实现的一个工具类,用来做Java Bean之间的转换。

导入Excel

  1. 添加依赖
<dependency>
  <groupId>cn.afterturn</groupId>
  <artifactId>easypoi-base</artifactId>
  <version>5.5.0</version>
</dependency>
  1. 创建Excel模板
public class ImportUserInfoVO {
    @Excel(name = "姓名", orderNum = "0", width = 20)
    private String name;

    @Excel(name = "年龄", orderNum = "1", width = 15)
    private String age;

    // 省略getters和setters
}
  1. 实现导入接口
@PostMapping("/importUserInfo")
public void importUserInfo(@RequestParam("file") MultipartFile file) throws IOException {
    List<ImportUserInfoVO> dataList = ExcelImportUtil.importExcel(file.getInputStream(), ImportUserInfoVO.class, new ImportParams());

    dataList.forEach(item -> {
        UserInfo userInfo = new UserInfo();
        userInfo.setName(item.getName());
        userInfo.setAge(Integer.parseInt(item.getAge()));
        userInfoService.save(userInfo);
    });
}

基于Jxls实现Excel导入和导出

Jxls是一个开源的Java库,专门用于生成Excel、Word和PowerPoint格式的报表。下面是在SpringBoot项目中使用Jxls进行Excel导入和导出的步骤。

导出Excel

  1. 添加依赖
<dependency>
  <groupId>org.jxls</groupId>
  <artifactId>jxls-core</artifactId>
  <version>2.12.1</version>
</dependency>
  1. 创建Excel模板

Excel模板可参考Jxls官方文档。

  1. 实现导出接口
@GetMapping("/exportUserInfo2")
public void exportUserInfo2(HttpServletResponse response) throws IOException {
    List<UserInfo> userList = userInfoService.getAllUserInfo();
    List<Map<String, Object>> dataList = new ArrayList<>();

    for (int i = 0; i < userList.size(); i++) {
        UserInfo userInfo = userList.get(i);
        Map<String, Object> item = new HashMap<>();
        item.put("id", userInfo.getId());
        item.put("name", userInfo.getName());
        item.put("age", userInfo.getAge());
        dataList.add(item);
    }

    response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + new String("用户信息导出2.xlsx".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
    response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
    InputStream is = this.getClass().getResourceAsStream("/templates/user-info-export-template.xlsx");

    try (OutputStream os = response.getOutputStream()) {
        Context context = new Context();
        context.putVar("dataList", dataList);
        JxlsHelper.getInstance().setUseFastFormulaProcessor(false).processTemplate(is, os, context);
    }
}

导入Excel

  1. 添加依赖
<dependency>
  <groupId>org.jxls</groupId>
  <artifactId>jxls-reader</artifactId>
  <version>2.4.3</version>
</dependency>
  1. 实现导入接口
@PostMapping("/importUserInfo2")
public void importUserInfo2(@RequestParam("file") MultipartFile file) throws IOException {
    try (InputStream inputStream = file.getInputStream()) {
        XLSReader reader = ReaderBuilder.buildFromXML(this.getClass().getResourceAsStream("/templates/user-info-import-template.xml"));
        List<UserInfo> userList = new ArrayList<>();
        List<Size> sizeList = new ArrayList<>();
        List<RowData> rowList = new ArrayList<>();

        Map<String, Object> beans = new HashMap<>();
        beans.put("userList", userList);
        beans.put("sizeList", sizeList);
        beans.put("rowList", rowList);

        SimpleBlockReader simpleBlockReader = new SimpleBlockReader() {
            @Override
            public void addRows(int sheetIndex, int rowIndex, List row) {
                if (rowIndex > 0) {
                    UserInfo userInfo = new UserInfo();
                    userInfo.setName((String) row.get(0));
                    userInfo.setAge((Integer) row.get(1));
                    userList.add(userInfo);
                }
            }

            @Override
            public void addSize(int sheetIndex, int rowIndex, int columnIndex, Size size) {
                sizeList.add(size);
            }

            @Override
            public void mergeCells(int sheetIndex, List<CellRangeAddress> mergedRegions) {
            }

            @Override
            public void row(int sheetIndex, int rowIndex) {
                if (rowIndex > 0) {
                    Object row = new RowData(rowIndex);
                    rowList.add((RowData) row);
                }
            }
        };

        ReaderConfig.getInstance().setSimpleBlockReader(simpleBlockReader);
        reader.read(inputStream, beans);
        userInfoService.saveBatch(userList);
    }
}

结语

以上就是使用EasyPOI和Jxls实现SpringBoot应用中Excel数据的导入和导出的方法了。根据实际需求选择相应的实现方式,可大大提高开发效率。

阅读剩余 77%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot导入导出数据实现方法详解 - Python技术站

(1)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 数据库CURD必备搭档mybatis plus详解

    数据库CURD必备搭档mybatis plus详解 什么是MyBatis Plus MyBatis Plus是一个基于MyBatis的增强工具,简化了MyBatis的操作,减少了开发人员的工作量,让开发人员能够更加专注于业务逻辑的实现。 MyBatis Plus的常用功能 快速Mapper接口的开发 自动分页 自动注入公共字段 代码生成器 快速开发Mappe…

    Java 2023年6月1日
    00
  • eclipse连接数据库并实现用户注册登录功能

    首先需要明确的是,eclipse并不能直接连接数据库,需要借助一些工具和驱动才能实现。以下是连接数据库并实现用户注册登录功能的完整攻略: 环境准备 安装JDK、eclipse、MySQL数据库(或其他支持JDBC的数据库) 下载并安装MySQL JDBC驱动包(类似于mysql-connector-java.jar) 创建一个Java项目,设置好项目的cla…

    Java 2023年5月20日
    00
  • Spring零基础入门WebFlux响应式编程

    Spring零基础入门WebFlux响应式编程攻略 什么是WebFlux? WebFlux是Spring框架5.0版本引入的新特性,它是基于响应式编程模型的Web框架,具有高可扩展性、高并发性等优势。 必备技能要求 在学习WebFlux前,需要掌握以下技能: Spring基础知识,如IoC/DI、AOP等概念 Java 8的Lambda表达式和Stream …

    Java 2023年5月19日
    00
  • Maven生命周期和及插件原理用法详解

    Maven生命周期和插件原理用法详解 什么是Maven生命周期? Maven生命周期指的是一些固定的、预定义的构建顺序,Maven通过定义一系列阶段(Phase),每个阶段表示一些特定的任务,它们按照一定的顺序执行,最终完成项目构建。Maven生命周期包括三个阶段:- 清理周期:此周期主要是负责清理相关的上一次构建的内容- 默认周期:此周期是最主要的构建阶段…

    Java 2023年5月20日
    00
  • Java 8中的18个常用日期处理(收藏)

    Java 8中的18个常用日期处理(收藏) 介绍 Java 8以前的日期处理方式比较麻烦,Java 8引入了新的日期时间API,也称为JSR-310,使对日期和时间的处理更加简便。本文将介绍Java 8中的18个常用日期处理方法。 1. 获取当天的日期 LocalDate today = LocalDate.now(); 使用LocalDate.now()方…

    Java 2023年5月20日
    00
  • 使用Filter过滤器中访问getSession()要转化

    在使用Filter过滤器过程中,访问getSession()方法时需要进行类型转换。因为getSession()方法在ServletRequest接口和HttpServletRequest类中都存在,然而在特定情况下过滤器可能无法确定当前请求是一种类型还是另一种类型的Session。 在这种情况下,我们需要对ServletRequest进行类型转换。将Ser…

    Java 2023年5月20日
    00
  • springBoot系列常用注解(小结)

    那我会从以下几个方面为您详细讲解springBoot系列常用注解: Spring Boot注解概述 Spring Boot常用注解 Spring Boot常见注解示例解析 1. Spring Boot注解概述 Spring Boot是Spring开发团队为简化Spring开发而设计的一个轻量级框架。在使用Spring Boot中,注解是至关重要,它们可以用来…

    Java 2023年5月15日
    00
  • Java中线程死亡的几种情况实例分析

    Java中线程死亡的几种情况实例分析 当线程执行完任务或者发生异常时,线程将会结束并死亡。本文将详细讲解Java中线程死亡的几种情况实例分析。 线程执行完任务 当线程完成其分配的任务时,线程将自动结束并死亡。例如,下面是一个计算1到100的线程: public class MyThread extends Thread { @Override public …

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部