当前位置: 首页 > news >正文

使用 hutool工具实现导入导出功能。

hutool工具网址

Hutool参考文档

pom依赖

 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.20</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>

导出接口

实体类属性加上@Alias注解,加上这个注解导入文件时表头是中文的也可以。

用法:@Alias("用户名")

以下代码中有些注释掉的代码是其他的用法,@Alias注解这个方法比较方便,可能还有更好的方法大家自行探索。

user.java

package com.qing.springboot.entity;import cn.hutool.core.annotation.Alias;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;import java.io.Serializable;
import java.time.LocalDateTime;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;/*** <p>** </p>** @author Dong* @since 2024-07-20*/
@Data
@TableName("sys_user" )
@ApiModel(value = "User对象", description = "" )
public class User implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty("id" )@TableId(value = "id", type = IdType.AUTO)@Alias("id")private Integer id;@ApiModelProperty("用户名" )@Alias("用户名")private String username;@ApiModelProperty("密码" )@Alias("密码")private String password;@ApiModelProperty("昵称" )@Alias("昵称")private String nickname;@ApiModelProperty("邮箱" )@Alias("邮箱")private String email;@ApiModelProperty("电话" )@Alias("电话")private String phone;@ApiModelProperty("地址" )@Alias("地址")private String address;@ApiModelProperty("创建时间" )@Alias("创建时间")private LocalDateTime createTime;@ApiModelProperty("头像" )@Alias("头像")private String avatarUrl;}

 UserController.java

 /*** 导出接口*/@GetMapping("/export")public void export(HttpServletResponse response) throws Exception {// 从数据库查询出所有的数据List<User> list = userService.list();// 通过工具类创建writer 写出到磁盘路径
//        ExcelWriter writer = ExcelUtil.getWriter(filesUploadPath + "/用户信息.xlsx");// 在内存操作,写出到浏览器ExcelWriter writer = ExcelUtil.getWriter(true);//自定义标题别名
//        writer.addHeaderAlias("username", "用户名");
//        writer.addHeaderAlias("password", "密码");
//        writer.addHeaderAlias("nickname", "昵称");
//        writer.addHeaderAlias("email", "邮箱");
//        writer.addHeaderAlias("phone", "电话");
//        writer.addHeaderAlias("address", "地址");
//        writer.addHeaderAlias("createTime", "创建时间");
//        writer.addHeaderAlias("avatarUrl", "头像");// 一次性写出list内的对象到excel,使用默认样式,强制输出标题writer.write(list, true);// 设置浏览器响应的格式response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");String fileName = URLEncoder.encode("用户信息", "UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");ServletOutputStream out = response.getOutputStream();writer.flush(out, true);out.close();writer.close();}

导入接口

  /*** excel 导入* @param file* @throws Exception*/@PostMapping("/import")public Boolean imp(MultipartFile file) throws Exception {InputStream inputStream = file.getInputStream();ExcelReader reader = ExcelUtil.getReader(inputStream);
//   方式1:(推荐) 通过 javabean的方式读取Excel内的对象,但是要求表头必须是英文(使用@Alias则中文的也可以),跟javabean的属性要对应起来
//        reader.addHeaderAlias("username", "用户名");
//        reader.addHeaderAlias("password", "密码");
//        reader.addHeaderAlias("nickname", "昵称");
//        reader.addHeaderAlias("email", "邮箱");
//        reader.addHeaderAlias("phone", "电话");
//        reader.addHeaderAlias("address", "地址");
//        reader.addHeaderAlias("createTime", "创建时间");
//        reader.addHeaderAlias("avatarUrl", "头像");List<User> list = reader.readAll(User.class);userService.saveBatch(list);// 方式2:忽略表头的中文,直接读取表的内容
//        List<List<Object>> list = reader.read(1);
//        List<User> users = CollUtil.newArrayList();
//
//        for (List<Object> row : list) {
//            User user = new User();
//            user.setUsername(row.get(0).toString());
//            user.setPassword(row.get(1).toString());
//            user.setNickname(row.get(2).toString());
//            user.setEmail(row.get(3).toString());
//            user.setPhone(row.get(4).toString());
//            user.setAddress(row.get(5).toString());
//            user.setAvatarUrl(row.get(6).toString());
//            users.add(user);
//        }
//        userService.saveBatch(users);return true;}

Vue上传文件

Vue中上传文件可以用element ui组件的组件。

vue导出

<el-button type="primary" @click="exp" class="ml-5">导出 <i class="el-icon-top"></i></el-button>exp() {window.open("http://localhost:9090/user/export")
}

vue导入

<el-upload action="http://localhost:9090/user/import" :show-file-list="false" accept="xlsx" :on-success="handleExcelImportSuccess" style="display: inline-block"><el-button type="primary" class="ml-5">导入 <i class="el-icon-bottom"></i></el-button>
</el-upload>handleExcelImportSuccess() {this.$message.success("导入成功")this.load()
}

相关文章:

使用 hutool工具实现导入导出功能。

hutool工具网址 Hutool参考文档 pom依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.20</version></dependency><dependency><groupId>org.apache.poi</gro…...

大语言模型-Transformer-Attention Is All You Need

一、背景信息&#xff1a; Transformer是一种由谷歌在2017年提出的深度学习模型。 主要用于自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;特别是序列到序列&#xff08;Sequence-to-Sequence&#xff09;的学习问题&#xff0c;如机器翻译、文本生成等。Transfor…...

spring(二)

一、为对象类型属性赋值 方式一&#xff1a;(引用外部bean) 1.创建班级类Clazz package com.spring.beanpublic class Clazz {private Integer clazzId;private String clazzName;public Integer getClazzId() {return clazzId;}public void setClazzId(Integer clazzId) {th…...

MAC 数据恢复软件: STELLAR Data Recovery For MAC V. 12.1 更多增强功能

天津鸿萌科贸发展有限公司是 Stellar 系列软件的授权代理商。 STELLAR Data Recovery For MAC 该数据恢复软件可从任何存储驱动器、清空的回收站以及崩溃或无法启动的 Mac 设备中恢复丢失或删除的文件。 轻松恢复已删除的文档、照片、音频文件和视频。自定义扫描以帮助恢复特…...

初识godot游戏引擎并安装

简介 Godot是一款自由开源、由社区驱动的2D和3D游戏引擎。游戏开发虽复杂&#xff0c;却蕴含一定的通用规律&#xff0c;正是为了简化这些通用化的工作&#xff0c;游戏引擎应运而生。Godot引擎作为一款功能丰富的跨平台游戏引擎&#xff0c;通过统一的界面支持创建2D和3D游戏。…...

Windows配置Qt+VLC

文章目录 前言下载库文件提取文件编写qmakeqtvlc测试代码 总结 前言 在Windows平台上配置Qt和VLC是开发多媒体应用程序的一个重要步骤。Qt作为一个强大的跨平台应用开发框架&#xff0c;为开发人员提供了丰富的GUI工具和库&#xff0c;而VLC则是一个开源的多媒体播放器&#x…...

本地部署 mistralai/Mistral-Nemo-Instruct-2407

本地部署 mistralai/Mistral-Nemo-Instruct-2407 1. 创建虚拟环境2. 安装 fschat3. 安装 transformers4. 安装 flash-attn5. 安装 pytorch6. 启动 controller7. 启动 mistralai/Mistral-Nemo-Instruct-24078. 启动 api9. 访问 mistralai/Mistral-Nemo-Instruct-2407 1. 创建虚拟…...

2月科研——arcgis计算植被差异

ArcGIS中&#xff0c;设置高于或低于某个值的像元为 -9999&#xff0c;然后将这些地方设为空——目的&#xff1a;去除异常值和黑色背景值 Con(("T_std ano7.tif" > 2) | ("T_std ano7.tif" < - 2), - 9999,"T_std ano7.tif") SetNull(&…...

深入理解Android中的缓存与文件存储目录

&#x1f31f; 引言 在Android应用开发中&#xff0c;合理管理应用的数据存储至关重要。应用可能需要保存各种类型的数据&#xff0c;从简单的配置信息到多媒体文件&#xff0c;甚至是缓存数据以提高性能和用户体验。Android提供了多个内置目录来满足这些需求&#xff0c;但它…...

Linux_生产消费者模型

目录 1、生产消费者模型示意图 2、生产者消费者之间的关系 3、定义交易场所 4、实现生产消费者模型 5、伪唤醒 6、多生产多消费者的实际运用 7、POSIX信号量 7.1 初始化信号量 7.2 销毁信号量 7.3 等待信号量 7.4 发布信号量 8、生产消费的环形队列模型 8.1…...

【Vue】`v-if` 指令详解:条件渲染的高效实现

文章目录 一、v-if 指令概述二、v-if 的基本用法1. 基本用法2. 使用 v-else3. 使用 v-else-if 三、v-if 指令的高级用法1. 与 v-for 一起使用2. v-if 的性能优化 四、v-if 的常见应用场景1. 表单验证2. 弹窗控制 五、v-if 指令的注意事项 Vue.js 是一个用于构建用户界面的渐进式…...

junit mockito Base基类

编写单元测试时我们都习惯性减少重复代码 以下基于spring mvc框架&#xff0c;需要手动pom导包 BaseTest类用于启动上下文进行debug调试 MockBaseTset类用于不启动上下文进行打桩mock pom.xml <dependency><groupId>org.mockito</groupId><artifactId…...

朋友圈运营分享干货2

朋友圈发什么内容&#xff1f; 1、产品相关 产品服务&#xff1a;产品的内容要有“用户视角”从用户的使用痛点入手&#xff0c;写到用户心坎里&#xff0c;才能引发购买 买家秀&#xff1a;买家秀是很好的朋友圈索材&#xff0c;可以让用户有一个正面感知清楚了解工品的情况…...

linux中创建一个名为“thread1“,堆栈大小为1024,优先级为2的线程

在Linux中&#xff0c;直接创建一个具有特定堆栈大小和优先级的线程通常不是通过标准的POSIX线程&#xff08;pthread&#xff09;库直接支持的。POSIX线程库&#xff08;pthread&#xff09;提供了创建和管理线程的基本机制&#xff0c;但不直接支持设置线程的堆栈大小或优先级…...

架构以及架构中的组件

架构以及架构中的组件 Transform Transform 以下的代码包含&#xff1a; 标准化的示例残差化的示例 # huggingface # transformers# https://www.bilibili.com/video/BV1At4y1W75x?spm_id_from333.999.0.0import copy import math from collections import namedtupleimport …...

Docker启动PostgreSql并设置时间与主机同步

在 Docker 中启动 PostgreSql 时&#xff0c;需要配置容器的时间与主机同步。可以通过在 Dockerfile 或者 Docker Compose 文件中设置容器的时区&#xff0c;或者使用宿主机的时间来同步容器的时间。这样可以确保容器中的 PostgreSql 与主机的时间保持一致&#xff0c;避免在使…...

提升无线网络安全:用Python脚本发现并修复WiFi安全问题

文章目录 概要环境准备技术细节3.1 实现原理3.2 创建python文件3.3 插入内容3.4 运行python脚本 加固建议4.1 选择强密码4.2 定期更换密码4.3 启用网络加密4.4 关闭WPS4.5 隐藏SSID4.6 限制连接设备 小结 概要 在本文中&#xff0c;我们将介绍并展示如何使用Python脚本来测试本…...

#三元运算符(python/java/c)

引入&#xff1a;什么是三元运算符呢&#xff1f;无疑其操作元有三个&#xff0c;一个是条件表达式&#xff0c;剩余两个为值&#xff0c;条件表达式为真时运算取第一个值&#xff0c;为假时取第二个值。 一 Python true_expression if condition else false_expressi…...

探索Python自然语言处理的新篇章:jionlp库介绍

探索Python自然语言处理的新篇章&#xff1a;jionlp库介绍 1. 背景&#xff1a;为什么选择jionlp&#xff1f; 在Python的生态中&#xff0c;自然语言处理&#xff08;NLP&#xff09;是一个活跃且不断发展的领域。jionlp是一个专注于中文自然语言处理的库&#xff0c;它提供了…...

Deepin系统,中盛科技温湿度模块读温度纯c程序(备份)

#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <termios.h>int main() {int fd;struct termios options;// 打开串口设备fd open("/dev/ttyMP0", O_RDWR | O_NOCTTY|O_NDELAY); //O_NDELAY:打开设备不阻塞//O_NOCTT…...

别再只懂BDF了!手把手教你理解PCIe ARI如何将Function数量扩展到256个

突破PCIe传统限制&#xff1a;深入解析ARI如何实现256个功能扩展 在数据中心和云计算架构快速发展的今天&#xff0c;虚拟化技术对硬件资源分配提出了更高要求。传统PCIe设备的8个功能限制已成为制约虚拟功能扩展的瓶颈&#xff0c;特别是在SR-IOV&#xff08;单根I/O虚拟化&am…...

芯片设计公司ISO 9001认证:从质量管理体系到流片成功的工程实践

1. 从一则旧闻聊起&#xff1a;ISO 9001认证对一家芯片设计公司意味着什么&#xff1f;前几天在整理资料时&#xff0c;偶然翻到一篇2011年的行业旧闻&#xff0c;说的是当时一家名为SiliconBlue Technologies的公司&#xff0c;获得了ISO 9001:2008质量管理体系认证。新闻稿写…...

FigmaCN中文界面实战指南:深度解析浏览器插件本地化技术实现

FigmaCN中文界面实战指南&#xff1a;深度解析浏览器插件本地化技术实现 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN Figma作为全球领先的云端设计协作平台&#xff0c;其英文界面一…...

避坑指南:ESP32-C3蓝牙通信中ESP_GATTS_READ_EVT事件的正确理解与数据更新时机

ESP32-C3蓝牙GATT通信中的数据更新陷阱与实战解决方案 当你在ESP32-C3上实现蓝牙GATT通信时&#xff0c;是否遇到过这样的困惑&#xff1a;明明在ESP_GATTS_READ_EVT事件中更新了特征值&#xff0c;但客户端读取到的却总是旧数据&#xff1f;这个看似简单的现象背后&#xff0c…...

从ST-Ericsson案例剖析半导体合资企业的战略困境与生存法则

1. 从一篇旧文看半导体合资企业的生存逻辑最近在整理行业历史资料时&#xff0c;翻到了一篇2011年发布于EE Times的文章&#xff0c;标题是《ST-Ericsson还能撑多久&#xff1f;》。这篇文章像一枚时间胶囊&#xff0c;精准地记录了一家曾经备受瞩目的无线芯片合资公司在特定时…...

开源协作平台smouj:微内核插件化架构与全栈部署实战

1. 项目概述&#xff1a;一个开源协作平台的诞生与价值 最近在开源社区里&#xff0c;一个名为“smouj/smouj”的项目引起了我的注意。乍一看这个标题&#xff0c;你可能会有点摸不着头脑&#xff0c;这不像我们常见的“vue/vue”或“tensorflow/tensorflow”那样一目了然。但恰…...

基于Node.js与whatsapp-web.js构建WhatsApp AI聊天机器人全流程解析

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目&#xff0c;叫harshitethic/whatsapp-chatgpt。光看名字&#xff0c;很多朋友可能就猜到了&#xff0c;这是一个把ChatGPT的能力集成到WhatsApp里的工具。简单来说&#xff0c;就是让你能在WhatsApp里直接和AI对话&…...

手把手教你用PyTorch复现EfficientNetV2(附完整代码):从网络搭建到渐进式训练全流程

从零实现EfficientNetV2&#xff1a;代码级解析与渐进式训练实战 当你第一次翻开EfficientNetV2论文时&#xff0c;那些复杂的复合缩放系数和渐进式训练策略可能让人望而生畏。但别担心——本文将带你用PyTorch从最基础的卷积模块开始&#xff0c;逐层构建这个高效的视觉模型。…...

【Flutter for open harmony 】Flutter三方库Dio网络请求+熬夜记录列表的鸿蒙化适配与实战指南

【Flutter for open harmony 】Flutter三方库Dio网络请求熬夜记录列表的鸿蒙化适配与实战指南 欢迎加入开源鸿蒙跨平台社区&#xff1a;https://openharmonycrossplatform.csdn.net 大家好&#xff0c;我是ShineQiu&#xff0c;上海某高校计算机科学与技术专业大二在读学生。这…...

从‘方波变形记’聊起:为什么你的高速信号需要Tx EQ?一个给嵌入式软件/FPGA工程师的通俗图解

从‘方波变形记’聊起&#xff1a;为什么你的高速信号需要Tx EQ&#xff1f; 想象一下&#xff0c;你正在观看一场高清直播&#xff0c;画面突然出现马赛克&#xff1b;或者传输重要数据时&#xff0c;系统频繁报错。这些问题的根源&#xff0c;可能就藏在信号传输的微观世界里…...