springBoot整合easyexcel实现导入、导出功能
本次使用的框架是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、编写实体类:
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层
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;}
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层代码:
/*** 导入用户* @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层
//service:
List<TUser> exportUser();
//serviceImp@Overridepublic List<TUser> exportUser() {List<TUser> tUsers = tUserMapper.selectList(null);return tUsers;}
注:本次只在service层查了一下数据,但业务逻辑一般写在service层中。
2、编写controller层
@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工具类中做成静态方法,方便调用
相关文章:
springBoot整合easyexcel实现导入、导出功能
本次使用的框架是springboot,使用mybatisplus操作表,使用easyexcel实现表格的导入与导出。 操作步骤 1、导入依赖:(pom.xml) <!-- 查看excel的maven仓库 https://mvnrepository.com/artifact/com.alibaba/easyex…...
代码随想录训练营第35天|逆序背包
46. 携带研究材料 #include <iostream> #include <vector> using namespace std; int main(){int m,n;cin>>m>>n;vector<int> weights(m,0), values(m,0),dp(n1,0);for(int i0; i<m; i){cin>>weights[i];}for(int i0; i<m; i){cin…...
Centos7环境下Hive的安装
Centos7环境下Hive的安装 前言一、安装Hive1.1 下载并解压1.2 配置环境变量1.3 修改配置1. hive-env.sh2. hive-site.xml 1.4 拷贝数据库驱动1.5 初始化元数据库报错 1.6 安装MySQL1.7 启动 二、HiveServer2/beeline2.1 修改Hadoop配置2.2 修改Hive配置2.2 启动hiveserver22.3 …...
??Ansible——ad-hoc
文章目录 一、ad-hoc介绍二、ad-hoc的使用1、语法2、ad-hoc常用模块1)shell模块2)command模块3)script模块4)file模块5)copy模块6)yum模块7)yum-repository模块8)service模块9&#…...
清理Go/Rust编译时产生的缓存
Go Mac 1T的磁盘频频空间高级,发现是/Users/yourname/Library/Caches/go-build 目录占用了大量空间。 此目录保存来自 Go 构建系统的缓存构建工件。 如果目录太大,请运行go clean -cache。 运行go clean -fuzzcache以删除模糊缓存。 当时直接手工清理了…...
【linux】 ls命令
ls 命令是 Linux 和 Unix 系统中用于列出目录内容的命令。它显示指定目录下的文件和子目录列表。如果不指定目录,ls 默认显示当前目录下的内容。 基本用法 ls [选项] [文件或目录...] 无选项:简单地列出当前目录下的文件和目录。文件或目录࿱…...
STM32的寄存器深度解析
目录 一、STM32 寄存器概述 二、寄存器的定义与作用 三、寄存器分类 1.内核寄存器 2.外设寄存器 四、重要寄存器详解 1.GPIO 相关寄存器 2.定时器相关寄存器 3.中断相关寄存器 4.RCC 相关寄存器 五、寄存器操作方法 1.直接操作寄存器 2.使用库函数操作寄存器 六…...
win11 运行vmware workstation 虚拟机很卡,解决办法
本身win11的hyper V和vmare workstation有兼容性问题,正常来说,不能二者共存 需要在win11上流畅运行vmare虚拟机,需要在win11用管理员权限打开power shell 然后在里面运行命令: bcdedit /set hypervisorlaunchtype off powercfg /powerthr…...
C语言 | Leetcode C语言题解之第404题左叶子之和
题目: 题解: bool isLeafNode(struct TreeNode *node) {return !node->left && !node->right; }int sumOfLeftLeaves(struct TreeNode *root) {if (!root) {return 0;}struct TreeNode **q malloc(sizeof(struct TreeNode *) * 2001);in…...
jeesite支持db2数据库初始化sql
点击下载:jeesite5.8.1-db2-sql.rar 提取码: yqev...
微信小程序页面制作——婚礼邀请函(含代码)
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
股票量化接口api,国内股票期权怎么交易
炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…...
Spring解决循环依赖的原理
通过将自己注入自己,使用代理对象调用add方法解决了事务失效问题,但是这样不会产生循环依赖吗? 在OrdersCreateServiceImpl 中注入的是OrdersCreateServiceImpl 的代理对象,并不是OrdersCreateServiceImpl 本身实例,构…...
Openal o1初探
9 月 13 日,OpenAI 正式公开一系列全新 AI 大模型,传说的“草莓”终于上线,但是正式命名不叫“草莓”,而是o1。 一、为什么叫o1 为什么取名叫o1,OpenAI是这么说的: For complex reasoning tasks this is…...
基于python+django+vue的学生成绩管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…...
mimd 公平收敛在相图中的细节
aimd 的收敛已经说腻了,我曾经画了好几次相图。有朋友希望我能画一个 mimd 相图,我就再画一个稍微详细的。 下面相图收敛到稳定点的前提异步 mimd: 之所以要异步,举个例子,在执行 gx 时,要确保 y 已经执…...
爬虫--翻页tips
免责声明:本文仅做分享! 伪线程 from DrissionPage import ChromiumPage import timepage ChromiumPage() page.get("https://you.ctrip.com/sight/taian746.html") # 初始化 第0页 index_page 0# 翻页点击函数 sleep def page_turn():page…...
论文内容分类与检测系统源码分享
论文内容分类与检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…...
【MySQL】将表导出CSV(可以使用excel打开)
1、准备工作 查看数据库: show databases;切换数据库: use 数据库名;查看表名字 show tables;2、单个表导出 需要替换导出csv文件目录和表名 SELECT * INTO OUTFILE 目录/文件名.csv FIELDS TERMINATED BY , ENCLOSED BY " LINES TERMINATED …...
通用四期ARM架构银河麒麟桌面操作系统V10【安装、配置FTP服务端】
一、操作环境 服务端:银河麒麟桌面操作系统V10SP1 (服务端包链接:https://download.csdn.net/download/AirIT/89747026) 客户端:银河麒麟桌面操作系统V10SP1 (客户端包链接:https://downloa…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
