EasyExcel实现Excel导出

news2024/12/22 18:39:01

文章目录

  • EasyExcel
  • 引入依赖
  • 项目结构
    • 导出模板类
    • Controller
    • Service
    • ServiceImpl
    • mapper
  • 启动项目
  • PostMan测试

EasyExcel

EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。
他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。

引入依赖

 	<dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>3.1.3</version> 
    </dependency>
```# 表结构
```java
CREATE TABLE `student`  (
  `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '学生表ID',
  `sname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '学生姓名',
  `sno` bigint NOT NULL COMMENT '学号',
  `sex` char(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '性别',
  `age` int NOT NULL COMMENT '年龄',
  `is_deleted` tinyint UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否删除',
  PRIMARY KEY (`id`)
);

在这里插入图片描述

之前在上传的文章中已经导入过一些数据,所以现在表中有数据,可直接导出

项目结构

在这里插入图片描述

导出模板类

@Data
public class StudentVo {

    /**学生姓名**/
    @ExcelProperty(value = "姓名",index = 0)
    private String sname;
    /**学号**/
    @ExcelProperty(value = "学号",index = 1)
    private Long sno;
    /**性别**/
    @ExcelProperty(value = "性别",index = 2)
    private String sex;
    /**年龄**/
    @ExcelProperty(value = "年龄",index = 3)
    private Integer age;

}

Controller

@RestController
@RequestMapping("/easyExcel")
public class EasyExcelController {

    @Resource
    private IStudentService studentService;

    @PostMapping("/studentExport")
    public void studentExport(HttpServletResponse response){
        studentService.studentExport(response);
    }

}

Service

public interface IStudentService extends IService<Student> {
    void studentExport(HttpServletResponse response);
}

ServiceImpl

@Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements IStudentService {
    
    @Resource
    private StudentMapper studentMapper;
    
    @Override
    public void studentExport(HttpServletResponse response) {
        try {
            String fileName = "student";
            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build();
            WriteSheet studentInfo = EasyExcel.writerSheet(0,"student")
                    .head(StudentVo.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
                    .build();
            List<Student> studentList = studentMapper.selectList(null);
            excelWriter.write(studentList,studentInfo);

            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Content-Disposition","attachment;filename="+fileName+".xlsx");
            excelWriter.finish();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

mapper

public interface StudentMapper extends BaseMapper<Student> {
}

启动项目

在这里插入图片描述

PostMan测试

在这里插入图片描述

在这里插入图片描述
导出成功

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

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

相关文章

SQL 数据库

安装配置 【1】 MySQL安装配置教程&#xff08;超级详细、保姆级&#xff09; 【2】 MySQLNavicat安装配置教程&#xff08;超级详细、保姆级&#xff09; 学习资料 【戴师兄】SQL入门免费教程 刷题链接&#xff1a;https://share.mubu.com/doc/4BHMMbbvIMb 学习笔记&#xf…

【无标题】CloudOS:物联网开发平台,云上开发,边端交付

什么是物联网&#xff1f; 物联网&#xff08;Internet of Things&#xff0c;简称IoT&#xff09;是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术&#xff0c;实时采集任何需要监控、 连接、互动的物体或过程&#xff0c;采集…

RFID数据采集设备怎么选择?

RFID技术具有非接触识别的特性&#xff0c;可对贴有RFID标签的物体进行远距离非接触的批量识别&#xff0c;也是当下发展成熟的数据采集技术之一。RFID数据采集设备可对标签信息进行处理&#xff0c;并将读取到的标签信息传输到上位机中&#xff0c;针对不同的应用场景&#xf…

Linux系统root用户使用mv命令移动“/“根目录所有文件恢复方法

在使用mv命令对文件进行移动时&#xff0c;由于操作失误移动了根目录&#xff0c;导致除了cd命令&#xff0c;其他命令都无法使用。此时可以使用./ tab键查看当前目录下的文件此时无法再通过mv命令移动回去&#xff0c;因为执行mv命令的脚本ld-linux-x86-64.so.2找不到了。 正…

代码实现判断程序是32位还是64位

nuget 引入 Vanara.PInvoke.Kernel32 测试程序&#xff1a; using Vanara.PInvoke;var isExe Kernel32.GetBinaryType("C:\Windows\notepad.exe", out var type); if (!isExe) {return; } Console.WriteLine(type); // SCS_64BIT_BINARY如果是 32 位程序&#xff0…

学习JAVA打卡第三十六天

应用举例 例子&#xff1a;熟悉带finally子语句的try-catch语句&#xff0c;语句格式如下&#xff1a; 其执行机制是&#xff1a;在执行try-catch语句后执行finally语句&#xff0c;也就是说无论在try部分是否发生异常finally语句都会被执行。 但需要注意以下两种特殊情况&am…

Python“牵手”速卖通商品详情API接口运用场景及功能介绍

速卖通电商API接口是针对速卖通提供的电商服务平台&#xff0c;为开发人员提供了简单、可靠的技术来与速卖通电商平台进行数据交互&#xff0c;实现一系列开发、管理和营销等操作。其中包括商品详情API接口&#xff0c;通过这个API接口商家可以获取商品的详细信息&#xff0c;包…

【C++】C++11中比较重要的内容介绍

C11 前言正式开始统一的初始化列表{ }初始化对象{ }为容器初始化赋值运算符重载也支持{} 声明autodecltypenullptr STL中一些变化arrayforward_listunordered_map 和 unordered_set 右值引用表达式左值和右值左值右值 右值引用的使用场景移动构造和移动赋值重载右值分类移动构造…

使用 OpenTelemetry 构建可观测性 05 - 传播和行李(Propagation Baggage)

我们开发的应用程序可能具有不同的形态和架构&#xff1a;有些是单体应用&#xff0c;有些是微服务。为单体应用程序添加遥测数据相对来说简单&#xff0c;因为所有数据都在同一进程中。然而对于微服务应用程序&#xff0c;情况可能会更具挑战性。 通常&#xff0c;分布式微服…

C++信息学奥赛1135:配对碱基链

#include <iostream> #include <string> using namespace std;int main() {string arr;cin >> arr; // 输入字符串for (int i 0; i < arr.length(); i) {if (arr[i] A) {cout << "T"; // 如果当前字符是A&#xff0c;则输出T}else if…

PPPoE vs 静态:网络中的最佳选择

在企业网络中&#xff0c;选择适合的网络连接方式对于网络性能和安全至关重要。今天我将和大家分享关于PPPoE和静态IP地址的知识&#xff0c;探讨它们在企业网络中的优劣和最佳选择。本文将为您提供详细的分析和解决方案&#xff0c;帮助您在选择网络连接方式时做出明智的决策。…

【论文阅读】自动驾驶安全的研究现状与挑战

文章目录 摘要1.引言1.1.自动驾驶安全1.2.攻击面1.3.内容和路线图 2.自动驾驶技术2.1.组成2.2.技术 3.传感器安全3.1.照相机3.2.GNSS&#xff08;全球导航系统&#xff09;/IMU&#xff08;惯性测量单元&#xff09;3.3.超声波传感器3.4.毫米波雷达3.5.激光雷达3.6.多传感器交叉…

psycopg2 使用dbutils 工具封装

1.什么是dbutils Dbutils是一套工具&#xff0c;可为数据库提供可靠&#xff0c;持久和汇总的连接&#xff0c;该连接可在各种多线程环境中使用。 2.使用代码记录 db_config.py 数据库配置类&#xff1a; # -*- coding: UTF-8 -*- import psycopg2# 数据库信息 DB_TEST_HO…

0823|C++day3 类+this指针+类中的特殊成员函数(6种)

一、思维导图 二、作业 要求&#xff1a; 设计一个Per类。类中包含私有成员&#xff1a;姓名、年龄、指针成员身高、体重&#xff1b; 再设计一个Stu类&#xff0c;类中包含私有成员&#xff1a;成绩、Per类对象 p1&#xff1b; 设计这两个类的构造函数、析构函数和拷贝构造函数…

Spring练习30---用户列表的展示,其实用户列表的展示(上)

1、我们其实刚才分析了&#xff0c;用户表与表之间的关系是多对多&#xff0c;我们内部已经用到角色的信息了&#xff0c;那么在实体描述的&#xff0c;就得描述user实体和角色的关系 2、一个用户可以有多个角色 3、所以我在描述实体关系的时候&#xff0c;我咋写&#xff0c;…

玩转Mysql系列 - 第5天:DML操作汇总,确定你都会?

这是Mysql系列第5篇。 环境&#xff1a;mysql5.7.25&#xff0c;cmd命令中进行演示。 DML(Data Manipulation Language)数据操作语言&#xff0c;以INSERT、UPDATE、DELETE三种指令为核心&#xff0c;分别代表插入、更新与删除&#xff0c;是必须要掌握的指令&#xff0c;DML…

【王道-第三章-内存管理】

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 内存的基础知识一、什么是内存&#xff1f;有何作用&#xff1f;二、内存单位三、指令的工作原理四、三种装入方式1、绝对装入2、可重定位装入3、动态运行时装入 五、从写程序到程序运行六、链接的三种方式七、总结 No.…

stm32之8.中断

&#xff08;Exceptions&#xff09;异常是导致程序流更改的事件&#xff0c;发生这种情况&#xff0c;处理器将挂起当前执行的任务&#xff0c;并执行程序的一部分&#xff0c;称之为异常处理函数。在完成异常处理程序的执行之后&#xff0c;处理器将恢复正常的程序执行&#…

Docker容器:dockerfile创建 LNMP 服务+Wordpress 网站平台

文章目录 一.环境及准备工作1.项目环境2.服务器环境3.任务需求 二.Linux 系统基础镜像三.docker构建Nginx1.建立工作目录上传安装包2.编写 Dockerfile 脚本3.准备 nginx.conf 配置文件4.生成镜像5.创建自定义网络6.启动镜像容器7.验证 nginx 四.docker构建Mysql1. 建立工作目录…

华为数通方向HCIP-DataCom H12-821题库(单选题:61-80)

第61题 关于 BGP 的Keepalive报文消息的描述,错误的是 A、Keepalive周期性的在两个BGP邻居之间发送 B、Keepalive报文主要用于对等路由器间的运行状态和链路的可用性确认 C、Keepalive 报文只包含一个BGP数据报头 D、缺省情况下,Keepalive 的时间间隔是180s 答案&#xff…