springBoot整合easyexcel实现导入、导出功能

embedded/2024/11/15 6:52:39/

本次使用的框架是springboot,使用mybatisplus操作表,使用easyexcel实现表格的导入与导出。

操作步骤

1、导入依赖:(pom.xml)

<!-- 查看excel的maven仓库 https://mvnrepository.com/artifact/com.alibaba/easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.2</version></dependency>

2、编写实体类:

java">package com.yzch.domain;import java.io.Serializable;import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableName;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/**
*
* @TableName t_user
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@TableName(value ="t_user")
public class TUser implements Serializable {private static final long serialVersionUID = 1L;/****/private Integer userId;/****/@ExcelProperty("用户名")private String userName;/****/@ExcelProperty("年龄")private Integer userAge;/****/@ExcelProperty("性别")private String userSex;/****/@ExcelProperty("收入")private Integer userIncome;/****/@ExcelProperty("省份")private String province;/****/@ExcelProperty("城市")private String city;/*** 职业*/@ExcelProperty("职业")private String userOccupation;/*** 是否有车,0是没有,1是有*/@ExcelProperty("车")private Integer userIsCar;}

注:@ExcelProperty()是放Excel表格的表名的

3、编写去重导入

1、编写service层

java">package com.yzch.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.yzch.domain.TUser;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.util.List;
import java.util.Map;public interface TUserService extends IService<TUser> {//导入int importUser(MultipartFile file) throws IOException;}
java">package com.yzch.service.impl;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.PageReadListener;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yzch.domain.TUser;
import com.yzch.mapper.TUserMapper;
import com.yzch.service.TUserService;
import org.apache.poi.ss.usermodel.Sheet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;@Service
public class TUserServiceImpl extends ServiceImpl<TUserMapper, TUser> implements TUserService {@Autowiredprivate TUserMapper tUserMapper;@Overridepublic int importUser(MultipartFile file) throws IOException {
//        将从表格中读取出来的数据,存入List<TUser>集合中,然后调用mapper层的方法将数据插入数据库Set<TUser> userSet = new LinkedHashSet<>();// 使用EasyExcel读取Excel文件EasyExcel.read(file.getInputStream(), TUser.class, new PageReadListener<TUser>(dataList -> {// 添加到Set中自动去重userSet.addAll(dataList);})).sheet().doRead();// 将Set转换为List,以便后续操作List<TUser> users = new LinkedList<>(userSet);
//        将list集合循环,利用mapper层的方法将数据插入数据库users.forEach(tUser ->tUserMapper.insert(tUser));return 1;}}

2、编写controller层代码:

java"> /*** 导入用户* @param file* @return* @throws IOException*/@PostMapping("/importUser")public ResultBean importUser(@RequestParam("file")  MultipartFile file) throws IOException {ResultBean resultBean = new ResultBean();int importUser = tUserService.importUser(file);if(importUser>0){resultBean.setMsg("导入成功!");}else {resultBean.setMsg("导入失败!");}return resultBean;}

注:将Excel表的数据通过EasyExcel.read()方法读取出来,并将表的数据存入用户集合中,然后通过mybatisplus提供的insert()方法,插入数据中。

4、编写导出功能

1、编写service层

java">//service:
List<TUser> exportUser();
//serviceImp@Overridepublic List<TUser> exportUser() {List<TUser> tUsers = tUserMapper.selectList(null);return tUsers;}

注:本次只在service层查了一下数据,但业务逻辑一般写在service层中。

2、编写controller层

java">@GetMapping("/exportUser/{fileName}")public ResultBean exportUser(HttpServletResponse response,@PathVariable String fileName) throws IOException {ResultBean resultBean = new ResultBean();List<TUser> list = tUserService.exportUser();if(list.size()>0){this.exportExcel(response ,fileName, list);resultBean.setMsg("导出成功!");}return resultBean;}/*** 导出Excel文件* @param response HttpServletResponse对象* @param fileName 文件名* @param users 用户数据列表* @throws IOException*/public void exportExcel(HttpServletResponse response, String fileName, List<TUser> users) throws IOException {// 设置response参数,以触发文件下载response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系fileName = URLEncoder.encode(fileName, "UTF-8");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");// 使用EasyExcel的write方法导出数据EasyExcel.write(response.getOutputStream(), TUser.class).sheet("用户数据").doWrite(users);}

注:本次在controller层调用了一下导出方法,这个导出方法可以放到utli工具类中做成静态方法,方便调用


http://www.ppmy.cn/embedded/114564.html

相关文章

WEB攻防-JS项目Node.js框架安全识别审计验证绕过

知识点&#xff1a; 1、原生JS&开发框架-安全条件 2、常见安全问题-前端验证&未授权 详细点&#xff1a; 1、什么是JS渗透测试&#xff1f; 在JavaScript中也存在变量和函数&#xff0c;当存在可控变量及函数调用即可参数漏洞 2、流行的Js框架有哪些&#xff1f; …

SpringMVC1~~~

快速入门 spring容器文件 在src下就是applicationContext-mvc.xml&#xff0c;需要在web.xml指定<init-param>&#xff0c;给DispatcherServlet指定要去操作的spring容器文件 在WEB-INF下就是xxx-servlet.xml&#xff0c;不需要在web.xml指定<init-param>,如果我们…

Java中的`String`、`StringBuffer` 和 `StringBuilder`:深入理解与应用场景

在Java中&#xff0c;String、StringBuffer 和 StringBuilder 是用于处理字符串的三种常用类。虽然它们都可以用于创建和操作字符串&#xff0c;但它们的实现、特性、性能以及使用场景各不相同。理解这三者的区别以及它们各自的应用场景&#xff0c;对于编写高效的Java程序至关…

如何学习JAIN-SLEE

要系统地学习 JAIN-SLEE (Java API for Integrated Networks – Service Logic Execution Environment)&#xff0c;你需要从基础概念到高级应用逐步深入学习。以下是详细的入门学习路径和顺序&#xff0c;涵盖必要的知识点、学习顺序和步骤&#xff0c;帮助你快速掌握 JAIN-SL…

如何在webots中搭建一个履带机器人

前期准备 下载webotswebots基本知识 a. 官方文档:Webots documentation: Track b. B站教程:webots-超详细入门教程(2020)_哔哩哔哩_bilibili搭建流程 搭建履带机器人主要使用到了webots中的track节点,这个节点是专门用来定义履带的相关属性,模拟履带运动的 首先,创建一个…

Unity3D入门(二) :Unity3D实现视角的丝滑过渡切换

1. 前言 上篇文章&#xff0c;我们已经初步了解了Unity3D&#xff0c;并新建并运行起来了一个项目&#xff0c;使相机视角自动围绕着立方体旋转。 这篇文章&#xff0c;我们来讲一下Unity3D怎么过渡地切换视角。 我们继续是我上篇文章中的项目&#xff0c;但是需要向把Camera…

深入理解时间复杂度与空间复杂度

在软件开发领域&#xff0c;特别是算法设计与优化中&#xff0c;理解并准确计算算法的时间复杂度和空间复杂度是至关重要的。这不仅能帮助我们评估算法的性能&#xff0c;还能指导我们在面对不同问题时选择合适的算法。本文将深入探讨JavaScript环境下如何详细分析和计算这两种…

前端CSS学习框架

⭐️ CSS &#x1f4ac; 描述&#xff1a;层叠样式表&#xff0c;用于设计风格和布局。 &#x1f4da; 资源&#xff1a;学习使用 CSS 为 HTML 添加样式 - 学习 Web 开发 | MDN ⭐️ 基本语法 ⭐️ 引入方式 行内样式 内部样式表 外部样式表 ⭐️ 选择器 通用选择器 标签…