前后端实现导出导入功能

news2024/12/23 1:15:32

目录

导出

1.后端代码

(1)相关依赖

(2)自定义实体类

(3)写一个查询方法list

(4)写导出接口

2.前端代码

3.效果示例

 导入

1.后端代码

(1)写导入接口

2.前端代码

3.效果示例


导出

1.后端代码

(1)相关依赖

        <!--hutool:工具类用不起的注意升级jar包版本或者降低版本,一般都是升高-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.0</version>
        </dependency>
        <!--poi:是Office文档的Java处理包,也得装上才能用-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.2.2</version>
        </dependency>

(2)自定义实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("person")
public class Person {

    @TableId(type = IdType.AUTO)
    @Column(name = "id")
    private Long Id;
    @Alias("用户名")
    private String name;
    @Alias("性别")
    private String gender;
    @Alias("年龄")
    private Integer age;
    @TableField(exist = false)
    private List<Long> ids;

    public Person(List<Long> ids) {
        this.ids = ids;
    }

}

注意:这里要加@Alias注解,是因为当我们要进行导入操作时,会因为xls中表名和字段是中文而无法导入数据库,因此这时需要作别名设置        

(3)写一个查询方法list

这里有很多方式,因为本章是聚焦在导入导出功能上,所以查询可以用通用Mapper或者MyBatis-plus提供好的方法都可以,我这里是自己写的,这里就不解释了

@Mapper
public interface PersonMapper extends BaseMapper<Person>{

    List<Person> selectPersonList(Person person);

}

(4)写导出接口

    @GetMapping("/export")
    public void export(HttpServletResponse response) throws IOException {
        //先从数据库查出所有的数据
        List<Person> list = personService.selectPersonList2();
        //我们创建Hutool给我们写好的ExcelWrite
        ExcelWriter wirter = ExcelUtil.getWriter(true);
        wirter.write(list, true);
        //我们将输出的excel文件写出到客户端直接下载
        //response为HttpServletResponse对象
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
//        response.setHeader("Content-Disposition","attachment;filename=test.xls");
        String fileName = URLEncoder.encode("用户相关信息", "UTF-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
        ServletOutputStream out = response.getOutputStream();
        wirter.flush(out, true);
        //关闭wirter,释放内存
        wirter.close();
        //关机输出servlet流
        IoUtil.close(out);

    }

2.前端代码

<template>
    <div>
        c
        <el-button type="success" @click="exp">导出</el-button>
    </div>
</template>

<script>

export default {

    methods: {

        exp() {

            window.open("http://localhost:8081/export")

        },

    }

}


</script>

3.效果示例

 

 导入

1.后端代码

(1)写导入接口

    @PostMapping("/import")
    public boolean imp(MultipartFile file) throws IOException {
        //获取来自浏览器发送的文件内容
        InputStream inputStream = file.getInputStream();
        //这里我们不用磁盘路径这种写死的,我们使用输入流动态进行读取
//        ExcelReader reader = ExcelUtil.getReader("读取文件来源");
        ExcelReader reader = ExcelUtil.getReader(inputStream);
        List<Person> all = reader.readAll(Person.class);
        //我们再使用MP的批量插入插入到数据库中即可
        personService.saveBatch(all);
        return true;
    }

2.前端代码

<template>
    <div>
        <el-upload action="http://localhost:8081/import" :show-file-list="false" accept=".xls,.xlsx"
            :on-success="handleExcelImportSuccess" style="display: inline-block;">
        </el-upload>
        <el-button type="success" @click="exp">导出</el-button>
    </div>
</template>

<script>

export default {

    methods: {

        handleUploadSuccess(response, file) {
            this.$message.success('导入成功');
        },

        exp() {

            window.open("http://localhost:8081/export")

        },

    }

}


</script>

3.效果示例

 假设将下列表导入

 看后台数据库

 

可以看到数据库被添加了进来,而且主键因为设置了自增属性,不会被xls表中的id号所影响 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在SpringBoot中对es集群的基本操作

在创建SpringBoot项目之前要先把上一篇文档搭建的集群打开,然后再创建SpringBoot项目,不会创建的可以访问这里 快速创建SpringBoot项目 提前准备: 1.导入pom依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starte…

23西安电子科技大学光电工程学院851考研录取情况

01、光电工程学院各个方向 02、23光电工程学院一志愿考研录取情况总览、平均分 PS&#xff1a;在23年&#xff0c;西电物理与光电工程学院拆分为两个院&#xff0c;分别是&#xff1a;物理学院和光电工程学院。其中物理学院改考602高等数学872普通物理&#xff0c;光电学院专业…

六、盒子模型

盒子模型 1、元素分类 1、元素分类 行内元素&#xff08;内联元素&#xff09;inline 从左向右&#xff0c;从上到下&#xff0c;依次显示 一个挨着挨一个 以下属性无效&#xff1a;width、height、maring、pading 行内元素内部无法嵌套块级元素 行内元素列表 a strong span …

leetcode 160.链表相交

⭐️ 往期相关文章 &#x1f4ab;链接1&#xff1a;链表分割 &#x1f4ab;链接2&#xff1a;链表中倒数第k个结点(快慢指针问题) &#x1f4ab;链接3&#xff1a;leetcode 876.链表的中间结点(快慢指针问题) &#x1f4ab;链接4&#xff1a;leetcode 206.反转链表 &#x1f4…

Servlet 的常用 API + 综合运用【表白墙】

前言 小亭子正在努力的学习编程&#xff0c;接下来将开启JavaEE的学习~~ 分享的文章都是学习的笔记和感悟&#xff0c;如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话&#xff0c;烦请点赞关注支持一波, 感激不尽~~ 目录 前言 一、HttpServlet Servlet 的生…

医学图像分割的全卷积transformer

文章目录 The Fully Convolutional Transformer for Medical Image Segmentation摘要本文方法实验结果 The Fully Convolutional Transformer for Medical Image Segmentation 摘要 我们提出了一种新的Transformer &#xff0c;能够分割不同模式的医学图像。医学图像分析的细…

【机器学习核心总结】什么是EM(最大期望值算法)

什么是EM(最大期望值算法) 在现实生活中&#xff0c;苹果百分百是苹果&#xff0c;梨百分白是梨。 生活中还有很多事物是概率分布&#xff0c;比如有多少人结了婚&#xff0c;又有多少人有工作&#xff0c; 如果我们想要调查人群中吸大麻者的比例呢&#xff1f;敏感问题很难得…

FOF常用的七种投资策略全解析

从当前市场上的投资策略种类来看&#xff0c;大致有七种&#xff0c;包括核心*卫星投资策略、「杠铃」投资策略、反向投资策略、成本平均策略和时间分散化策略、买入并持有策略、美林投资时钟策略、Alpha/Beta投资策略。 投资策略一:美林投资时钟策略 美林投资时钟投资策略相信…

CAN(2)-GD32

CAN(2)-GD32 GD32中CAN的特征 结构框图 CNA总线的工作模式 睡眠工作模式 初始化工作模式 正常工作模式 CAN通信模式 静默通信模式 回环通信模式 回环静默通信模式

hadoop --- MapReduce

MapReduce定义&#xff1a; MapReduce可以分解为Map (映射) Reduce (规约) &#xff0c; 具体过程&#xff1a; Map : 输入数据集被切分成多个小块&#xff0c;并分配给不同的计算节点进行处理Shuffle and Sort&#xff1a;洗牌和排序&#xff0c;在 Map 阶段结束后&#xf…

CCF-CSP真题《202303-4 星际网络II》思路+python,c++满分题解

想查看其他题的真题及题解的同学可以前往查看&#xff1a;CCF-CSP真题附题解大全 试题编号&#xff1a;202303-4试题名称&#xff1a;星际网络II时间限制&#xff1a;2.0s内存限制&#xff1a;1.0GB问题描述&#xff1a; 问题描述 随着星际网络的进一步建设和规模的增大&#x…

docker-compose部署BCH节点

BCH gitlab BCH github 1、下载BCH二进制文件 rootiZj6c076dm0c5n5b39lzlxZ:/data/docker-compose/bch# wget https://github.com/bitcoin-cash-node/bitcoin-cash-node/releases/download/v26.1.0/bitcoin-cash-node-26.1.0-x86_64-linux-gnu.tar.gz --2023-07-05 16:30:46--…

攻防世界-web-CAT

题目描述&#xff1a;抓住那只猫。界面如下&#xff1a; 1. 思路分析 界面很简单&#xff0c;只有一个输入框&#xff0c;提示我们输入域名&#xff0c;我们随便输入一个baidu.com 发现这个域名赋值给url参数传递到后台。因此&#xff0c;这里能做文章的地方只有这个url参数&a…

GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术

第一章 理论基础 1、Earth Engine平台及应用、主要数据资源介绍 2、Earth Engine遥感云重要概念、数据类型与对象等 3、JavaScript与Python遥感云编程比较与选择 4、Python基础&#xff08;语法、数据类型与程序控制结构、函数及类与对象等&#xff09; 5、常用Python软件…

算法与数据结构-栈

文章目录 什么是栈如何实现一个“栈”&#xff1f;定长顺序栈动长链式栈 栈的应用栈在函数调用中的应用栈在表达式求值中的应用栈在括号匹配中的应用 总结 什么是栈 后进者先出&#xff0c;先进者后出&#xff0c;这就是典型的“栈”结构。 就像一摞叠在一起的盘子。我们平时放…

JavaScript中的substring方法和fill方法,使用详细(fill方法获取一天24小时)

简介&#xff1a;JavaScript中的数组方法&#xff0c;可以帮助我们操作数组中的元素&#xff0c;以及对数组进行排序和过滤等操作&#xff1b;最近有用到substring和fill方法&#xff0c;这里来记录一下。 一. substring 方法&#xff1a; substring 方法用于从一个字符串中提…

2. PS基本操作

因为网页美工大部分效果图都是利用PS ( Photoshop )来做的,所以以后我们大部分切图工作都是在PS里面完成 ●文件—>打开&#xff1a;可以打开我们要测量的图片 ●CtrlR : 可以打开标尺&#xff0c;或者视图—>标尺 ●右击标尺&#xff0c;把里面的单位改为像素 ●Ctrl加号…

linux上docker容器运行web应用简单介绍(二)

相关文章&#xff1a; linux docker安装及报错处理_做测试的喵酱的博客-CSDN博客 一、mac 安装及使用docker_docker mac_做测试的喵酱的博客-CSDN博客 Docker 容器使用 | 菜鸟教程 linux应用docker基本使用&#xff08;一&#xff09;_做测试的喵酱的博客-CSDN博客 一、 …

【设计模式】第十七章:状态模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章&#xff1a;单例模式 【设计模式】第二章&#xff1a;工厂模式 【设计模式】第三章&#xff1a;建造者模式 【设计模式】第四章&#xff1a;原型模式 【设计模式】第五章&#xff1a;适配器模式 【设计模式】第六章&…

ChatGPT+MidJourney 3分钟生成你的动画故事

chatgpt是真的火了&#xff0c;chatgpt产生了一个划时代的意义——自chatgpt起&#xff0c;AI是真的要落地了。 chatgpt能做的事情太多了&#xff0c;多到最初开发模型的程序员自己&#xff0c;也没法说得清楚chatgpt都能做啥&#xff0c;似乎只要你能想得到&#xff0c;它都有…