spring boot 整合EasyPoi导入导出,下载模版功能

引入依赖

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.5.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.13</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.0</version></dependency><!--easypoi--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.4.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.22</version></dependency></dependencies>

连接数据库以及其他配置

server:port: 9000servlet:context-path: /spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/my?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8username: rootpassword: zzybzbmybatis:mapper-locations: classpath:/mappers/*.xmlconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpllogging:level:root: infocom:pzz:dao: debug# 开启swagger
swagger:enable: true

swagger的配置(这里使用swagger测试接口)

@Configuration
@ConditionalOnProperty(prefix = "swagger",value = {"enable"},havingValue = "true")
@EnableSwagger2  //开启swagger注解支持
public class SwaggerConfiguration {@Beanpublic Docket buildDocket() {/*** Docket:摘要对象,通过对象配置描述文件的信息。* apilnfo:设置描述文件中info。参数类型Apilnfoe'* select():返回ApiSelectorBuilder对象,通过对象调用build()可以创建Docket对象* ApilnfoBuilder: Apilnfo构建器。*/return new Docket(DocumentationType.SWAGGER_2).apiInfo(buildApiInfo()).select()// 要扫描的API(Controller)基础包.apis(RequestHandlerSelectors.basePackage("com.pzz")).paths(PathSelectors.any()).build();}private ApiInfo buildApiInfo() {Contact contact = new Contact("pzz","","");return new ApiInfoBuilder()//文档标题.title("导入导出API文档")//文档描述  .description("导入导出api").contact(contact)//文档版本.version("1.0.0").build();}
}

实体类添加@Excel注解

package com.pzz.entity;import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;import java.util.Date;
import java.io.Serializable;/*** 系统用户表(TbUser)实体类** @author makejava* @since 2023-06-21 16:49:12*/
@Data
public class TbUser implements Serializable {private static final long serialVersionUID = 872169419599604137L;/*** 主键*/@TableId(value = "id", type = IdType.AUTO)private Integer id;/*** 用户名*/@Excel(name = "姓名",width = 15)private String name;/*** 手机号*/@Excel(name = "手机号",width = 20)private String phone;/*** 邮箱*/@Excel(name = "邮箱",width = 20)private String email;/*** 专业*/@Excel(name = "专业",width = 15)private String profession;/*** 年龄*/@Excel(name = "年龄",width = 15)private String age;/*** 性别 , 1: 男, 2: 女*/@Excel(name = "性别",width = 15,replace = {"男_1","女_2"})private String gender;/*** 状态*/@Excel(name = "状态",width = 15)private String status;/*** 创建时间*/@Excel(name = "创建时间",width = 25,format = "yyyy-MM-dd")private Date createtime;}
  • name:Excel中的列名;
  • width:指定列的宽度;
  • needMerge:是否需要纵向合并单元格;
  • format:当属性为时间类型时,设置时间的导出导出格式;
  • desensitizationRule:数据脱敏处理,3_4表示只显示字符串的前3位和后4位,其他为*号;
  • replace:对属性进行替换;
  • suffix:对数据添加后缀。

controller接口

省略service和mapper层的代码,导入保存,导出查询,很简单的方法。

下载模版

	@Autowiredprivate ResourceLoader resourceLoader;/*** 下载模版* @param response* @throws IOException*/@ApiOperation("下载模版方式一")@GetMapping("/downloadTemplate")public void downloadTemplate(HttpServletResponse response) throws IOException {try {byte[] bytes = IOUtils.toByteArray(resourceLoader.getResource("classpath:templates/用户导入模版.xlsx").getInputStream());Workbook workbook = WorkbookFactory.create(new ByteArrayInputStream(bytes));ByteArrayOutputStream bo = new ByteArrayOutputStream();workbook.write(bo);bo.flush();byte[] array = bo.toByteArray();response.setHeader("Content-Type", "application/vnd.ms-excel");response.setHeader("Content-Disposition", "attachment;filename=" + new String("用户导入模版.xlsx".getBytes(StandardCharsets.UTF_8), "ISO-8859-1"));response.setCharacterEncoding("UTF-8");response.getOutputStream().write(array);response.setContentLength(array.length);} catch (Exception e) {//log.error("downloadTemplate --> download excel template failed, errorMsg: {}", e.getMessage(), e);throw new RuntimeException("获取模板失败");} finally {if (response.getOutputStream() != null) {response.getOutputStream().flush();}}}/*** 下载模版* @param response*/@ApiOperation("下载模版方式二")@GetMapping("getTemplate")public void getTemplate(HttpServletResponse response) {List<TbUser> heroList = new ArrayList<>();Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用户信息列表", "用户导入"), TbUser.class, heroList);downLoadExcel("TBUSER.xlsx", response, workbook);}private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {try {response.setCharacterEncoding("UTF-8");response.setHeader("content-Type", "application/vnd.ms-excel");response.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));workbook.write(response.getOutputStream());} catch (IOException e) {throw new RuntimeException(e.getMessage());}}

导出

	/*** 导出功能* @param map* @param request* @param response*/@ApiOperation("用户导出")@RequestMapping(value = "/exportMemberList", method = RequestMethod.GET)public void exportMemberList(ModelMap map,HttpServletRequest request,HttpServletResponse response) {List<TbUser> tbUserList = tbUserService.getTbUserList();ExportParams params = new ExportParams("用户列表", "用户列表", ExcelType.XSSF);map.put(NormalExcelConstants.DATA_LIST, tbUserList);map.put(NormalExcelConstants.CLASS, TbUser.class);map.put(NormalExcelConstants.PARAMS, params);map.put(NormalExcelConstants.FILE_NAME, "memberList");PoiBaseView.render(map, request, response, NormalExcelConstants.EASYPOI_EXCEL_VIEW);}

导入

	/*** 导入* @param file* @return*/@ApiOperation("用户导入")@RequestMapping(value = "/importMemberList", method = RequestMethod.POST)public String importMemberList(@RequestPart("file") MultipartFile file) {ImportParams params = new ImportParams();//params.setTitleRows(1);//去掉第一行的表头,从第二行开始params.setHeadRows(1);try {List<TbUser> list = ExcelImportUtil.importExcel(file.getInputStream(),TbUser.class, params);for (TbUser tbUser : list) {tbUserService.insert(tbUser);}System.out.println(list);return "success";} catch (Exception e) {e.printStackTrace();return "导入失败!";}}

测试

  • 导出
    在这里插入图片描述
    在这里插入图片描述
  • 导入
    在这里插入图片描述
    在这里插入图片描述
  • 下载模版

在这里插入图片描述

结束!!!!!!!
hy:16


										我们必须把学习变成一种习惯.--《终身成长》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/148.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IIS安装localhost显示下载,urlrewrite设置

1.取消ftp服务勾选 2. ping localhost ping 127.0.0.1 如果显示 &#xff1a;&#xff1a;1 则需要禁用ipv6 在注册表 找到并单击下面的注册表子项&#xff1a; HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\ 双击“DisabledComponents”以修…

Redis通信协议、过期回收策略

Redis通信协议-RESP协议 Redis是一个CS架构的软件&#xff0c;通信一般分两步&#xff08;不包括pipeline和PubSub&#xff09;&#xff1a; 客户端&#xff08;client&#xff09;向服务端&#xff08;server&#xff09;发送一条命令 服务端解析并执行命令&#xff0c;返回…

Unity 之 抖音小游戏本地数据最新存储方法分享

Unity 之 抖音小游戏本地数据最新存储方法分享 一、抖音小游戏文件存储系统背景二、文件存储系统的使用方法2.1 初始化2.1 创建目录2.3 存储数据2.4 删除目录/文件2.5 其他相关操作 三&#xff0c;小结 抖音小游戏是一种基于抖音平台开发的小型游戏&#xff0c;与传统的 APP 不…

研究人员发出警告,小心Akira勒索软件的Linux变体

Cyble研究和情报实验室的研究人员发现了Akira勒索软件一个复杂的Linux变体。 在最近的一份报告中&#xff0c;Cyble研究和情报实验室&#xff08;CRIL&#xff09;详细介绍了Akira勒索软件的一个复杂的Linux变体&#xff0c;引起了人们对Linux环境越来越容易受到网络威胁的关注…

laravel+vue共用一个域名,使用目录区分接口和项目的nginx配置

1、打包好的项目&#xff1a; 首先将打包好的项目放置public下&#xff0c;如下图 2、nginx配置文件 不带注释的伪静态&#xff08;推荐&#xff09; 备注&#xff1a;若在 location /admin 中的 admin 后面不加 “斜杠/”&#xff0c;则会出现访问 /admin-user 路由&#x…

U盘的文件系统为FAT32才可以同时在苹果电脑和windows电脑中正常使用

文章目录 1.驱动器F中的磁盘未被格式化。想现在格式化吗&#xff1f;2.U盘插到苹果电脑上后无法写入 1.驱动器F中的磁盘未被格式化。想现在格式化吗&#xff1f; 我之前U盘的文件系统为exFAT&#xff0c;插入Windows Server 2003系统的电脑中&#xff0c;打开时弹出上面的提示框…

LeetCode刷题笔记

目录 2748.美丽下标对的数目 思路&#xff1a;模拟 代码&#xff1a; 2749.得到整数零需要执行的最少操作数 思路&#xff1a;枚举 代码&#xff1a; 2750.将数组划分成若干好子数组的方式 思路&#xff1a; 代码&#xff1a; 2751.机器人碰撞 思路&#xff1a;栈模拟 代…

云原生(第二篇)k8s-二进制搭建

准备五台机器&#xff1a; master01&#xff1a;192.168.169.10 node01&#xff1a;192.168.169.40 node02&#xff1a;192.168.169.50 master02&#xff1a;192.168.169.60 负载均衡nginxkeepalive01&#xff08;master&#xff09;&#xff1a;192.168.169.20 负载均衡…

word转pdf实现

写一下笔记&#xff0c;以便在以后工作中用到&#xff1a; 导包&#xff1a; <!--word 转 pdf--> <dependency><groupId>com.documents4j</groupId><artifactId>documents4j-local</artifactId><version>1.0.3</version> &l…

python3开发-AI智能联系人管理系统

目录 背景 1. 数据收集与存储&#xff1a; 2. 搜索与过滤&#xff1a; 3. AI智能功能&#xff1a; 4. 用户界面与交互&#xff1a; 5. 数据备份与恢复&#xff1a; 6. 安全与权限管理&#xff1a; 7. 测试与部署&#xff1a; 代码示例 1. 数据收集与存储&#xff08;…

谷歌浏览器无法翻译成中文,谷歌翻译,最新(沉浸式翻译和划词翻译,chrome无法翻译,谷歌浏览器无法翻译此网页)

简介&#xff1a;谷歌浏览器自带的翻译功能&#xff0c;对我们来说用处很大&#xff0c;但有的时候突然就会变成“无法翻译此网页”&#xff0c;之前给大家提供过两种无法翻译此网页的解决方案&#xff0c;这次再给大家分享下两款别的翻译方法&#xff1b; 一、上次介绍&#x…

常用的Windows黑窗口cmd命令

Windows 命令提示符&#xff08;cmd&#xff09;提供了许多命令&#xff0c;用于执行各种系统管理任务、文件操作、网络配置等。以下是一些常用的命令&#xff0c;按照功能进行分类&#xff1a; 1. 文件和目录操作命令&#xff1a; dir&#xff1a;列出当前目录中的文件和子目…