springboot3导出数据库数据到excel
一、导入依赖
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.3.0</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>6.1.13</version></dependency>
二、实体类
package com.guide.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.apache.poi.ss.usermodel.Sheet;/*** @author cxy* @create 2024-10-11 09:41:43*/@Data
@TableName("workpiece")
public class Workpiece {@TableId(value = "id", type = IdType.AUTO)@Schema(description = "id")private Integer id;@TableField(value = "vehicleModel")@Schema(description = "车型")private String vehicleModel;@TableField(value = "twoNum")@Schema(description = "轴二起始Num")private Integer twoNum;@TableField(value = "threeNum")@Schema(description = "轴三起始Num")private Integer threeNum;@TableField(value = "imgUrl")@Schema(description = "图片路径")private String imgUrl;public Workpiece(int id, String vehicleModel, int twoNum, int threeNum, String imgUrl) {this.id = id;this.vehicleModel = vehicleModel;this.twoNum = twoNum;this.threeNum = threeNum;this.imgUrl = imgUrl;}public Workpiece() {}
}
三、controller层
package com.guide.controller;import cn.hutool.core.collection.CollUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import com.guide.entity.Workpiece;
import com.guide.result.Result;
import com.guide.service.WorkpieceService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.io.InputStream;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;/*** @author cxy* @create 2024-10-12 10:12:02*/@Tag(name = "excel")
@RequestMapping("/excel")
@RestController
@CrossOrigin(origins = "*")
@Slf4j
@RequiredArgsConstructor
public class ExcelController {private final WorkpieceService service;private final JdbcTemplate jdbcTemplate;@PostMapping("/downWorkpiece")@Schema(description = "工件信息导出excel")public Result downWorkpiece(HttpServletResponse response) throws IOException {Workbook workbook = new XSSFWorkbook();Sheet sheet = workbook.createSheet("Data");// 创建表头Row header = sheet.createRow(0);header.createCell(0).setCellValue("id");header.createCell(1).setCellValue("车型");header.createCell(2).setCellValue("轴二起始Num");header.createCell(3).setCellValue("轴三起始Num");header.createCell(4).setCellValue("图片路径");// 查询数据库并填充数据List<Workpiece> dataList = jdbcTemplate.query("SELECT id,vehicleModel,twoNum,threeNum,imgUrl FROM workpiece",(ResultSet rs, int rowNum) -> new Workpiece(rs.getInt("id"), rs.getString("vehicleModel"), rs.getInt("twoNum"), rs.getInt("threeNum"), rs.getString("imgUrl")));// 填充数据到Excel表格int rowNum = 1;for (Workpiece data : dataList) {Row row = sheet.createRow(rowNum++);row.createCell(0).setCellValue(data.getId());row.createCell(1).setCellValue(data.getVehicleModel());row.createCell(2).setCellValue(data.getTwoNum());row.createCell(3).setCellValue(data.getThreeNum());row.createCell(4).setCellValue(data.getImgUrl());}// 设置响应头response.setHeader("Content-Disposition", "attachment; filename=\"data.xlsx\"");response.setStatus(HttpServletResponse.SC_OK);// 写入响应流并下载文件ServletOutputStream outStream = response.getOutputStream();workbook.write(outStream);outStream.flush();workbook.close();return Result.success();}}
相关文章:
springboot3导出数据库数据到excel
一、导入依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.3.0</version></dependency><d…...
十四、行为型(观察者模式)
观察者模式(Observer Pattern) 概念 观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象间的一对多依赖关系,当被观察的对象(主题)状态发生改变时,所有依赖…...
爬取简书1
import osfrom selenium.webdriver.common.by import By from selenium import webdriver from selenium.webdriver.edge.service import Service import timeimport pandas as pdfrom selenium.webdriver.common.action_chains import ActionChainsdef get_aws():# 如果 WebDr…...
基于STM32单片机设计的矿山环境作业安全监测系统
文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】需求总结1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发1.5 模块的技术详情介绍【1】BC26-NBIOT模块【2】DHT11温湿度模块【3】PM2.5粉尘模块二…...
大数据linux操作系统
第一关:Linux的初体验 答案: cd / ls -a / (里面有空格要注意) 第二关:Linux的常用命令 答案: touch newfile mkdir newdir cp newfile newdir/newfileCpy 第三关:Linux查询命令帮助语句…...
MySQL 【日期】函数大全(七)
目录 1、UNIX_TIMESTAMP() 将指定的日期/日期时间转为 UNIX 时间戳值。 2、WEEK() 返回给定日期位于当年的第几周。 3、WEEKDAY() 返回给定日期的工作日编号。 4、WEEKOFYEAR() 返回给定日期位于当年的第几周 5、YEAR() 提取日期的年份部分并作为数字返回。 6、YEARWEEK()…...
IP报文格式、IPv6概述
IPv4报文格式 IPv4报文首部长度至少为20字节(没有可选字段和填充的情况下),下面来逐一介绍首部各个字段的含义 Version版本:表示采用哪一种具体的IP协议,对于IPv4来说该字段就填充4以表示,如果是IPv6就填充6IHL首部长度ÿ…...
学习记录:js算法(六十七):任务调度器
文章目录 任务调度器思路一思路二 任务调度器 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表,用字母 A 到 Z 表示,以及一个冷却时间 n。每个周期或时间间隔允许完成一项任务。任务可以按任何顺序完成,但有一个限制:两个…...
5分钟8图:Cursor如何让编程效率提升5倍?
5分钟8图,看Cursor如何革新AI编程? 作为一名AI编程的实践者,我很高兴为大家介绍Cursor - 一款基于VSCode的创新型集成开发环境(IDE),它巧妙地融合了先进的AI技术,为编程工作带来前所未有的便利。让我们通过多个图表深入了解Cursor的特性和工作流程。 Cursor的核心…...
车载实操:一对一实操学习、CANoe实操学习、推荐就业机会、就业技术支持、协助面试辅导
FOTA模块中OTA的知识点:1.测试过程中发现哪几类问题? 可能就是一个单键的ecu,比如升了一个门的ecu,他的升了之后就关不上,还有就是升级组合ecu的时候,c屏上不显示进度条。 2.在做ota测试的过程中ÿ…...
PACT 在微服务架构中的用途
在微服务架构盛行的今天,如何确保各个微服务之间的交互正确且稳定成为了一个关键问题。PACT(一种契约测试工具)在这个领域发挥着重要的作用。那么,PACT 在微服务架构中的用途到底是什么呢? 一、微服务架构的挑战 微服…...
LeetCode 3200.三角形的最大高度:枚举
【LetMeFly】3200.三角形的最大高度:枚举 力扣题目链接:https://leetcode.cn/problems/maximum-height-of-a-triangle/ 给你两个整数 red 和 blue,分别表示红色球和蓝色球的数量。你需要使用这些球来组成一个三角形,满足第 1 行…...
ssm基于java的招聘系统设计与开发+vue
系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码请私聊我 需要定制请私聊 目 录 第1章 绪论 1 1.1 课题背景 1 1.2 课题意义 1 1.3 研究内容 1 第2章 开发环境与技术 3 2.1 Java语言…...
【网络原理】TCP/IP五层网络模型之网络层-----IP协议详解,建议收藏!!
💐个人主页:初晴~ 📚相关专栏:计算机网络那些事 前几篇文章中我们深入研究了TCP协议,因为TCP协议在我们日常开发中的使用频率非常高。而相比之下,IP协议与我们普通程序员关系就没那么近了。一般是专门开发…...
三次握手与四次挥手
一、三次握手 AB之间 都会发送一个syn - ack。 A 先发 syn ,B收到 。 A: 什么都不知道 B:知道A可以发送。 B发送syn-ack,A收到 。 A: 知道B可以收也可以发 , B知道A可以发送。 A发送ack,B收到。 A : 知道B可以收也可以发 , B知道A…...
awk命令学习记录
awk命令 awk命令 表示将一行数据按特定分割符分割成多列,而从而选取特定列数的数据,默认分割符为空格,连接符默认也是空格 // 1. 更换分割符 awk -F : 1.txt // 1.txt为你的文件名 // 2. 打印多列 awk {print $1,$2} // $0为整行ÿ…...
科大讯飞嵌入式面试题及参考答案
平衡二叉树和普通二叉树的区别 平衡二叉树是一种特殊的二叉树,与普通二叉树相比有以下显著区别: 一、定义与结构 普通二叉树:二叉树是每个节点最多有两个子树的树结构。它没有特定的平衡要求,节点的分布可能比较随机。例如&#x…...
C Lua5.4.6 SDK开发库
下载 .lua执行 #include "lua.h" #include "lualib.h" #include "lauxlib.h"static int luaopen_ui(lua_State *L) {static const struct luaL_Reg lib_f[] = {{"saveFile", saveFile},{"loadFile", loadFile},{NULL, NULL…...
无线网卡知识的学习-- wireless基础知识(cfg80211)
1. 基本概念 mac80211 :这是最底层的模块,与hardware offloading 关联最多。 mac80211 的工作是给出硬件的所有功能与硬件进行交互。(Kernel态) cfg80211:是设备和用户之间的桥梁,cfg80211的工作则是观察跟踪wlan设备的实际状态. (Kernel态) nl80211: 介于用户空间与内核…...
Next.js 学习 - 路由系统(Routing)
Next.js 的路由系统基于文件系统,这意味着文件和文件夹的结构决定了 URL 路径。相较于传统的 React 应用中的路由配置,Next.js 的文件路由系统非常简洁和自动化。下面是对 Next.js 路由的详细介绍。 1. 目录结构 在 Next.js 13 中,app 目录…...
5分钟快速上手labelCloud:轻量级3D点云标注工具的完整指南
5分钟快速上手labelCloud:轻量级3D点云标注工具的完整指南 【免费下载链接】labelCloud A lightweight tool for labeling 3D bounding boxes in point clouds. 项目地址: https://gitcode.com/gh_mirrors/la/labelCloud 你是否正在寻找一款简单易用、功能强…...
3步解决魔兽争霸III现代兼容难题:写给经典RTS玩家的优化指南
3步解决魔兽争霸III现代兼容难题:写给经典RTS玩家的优化指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一款专为魔兽…...
Linux内核SLUB调试之slabinfo工具
前面我们介绍了Linux内核SLUB调试功能,现在我们来介绍一下slabinfo等相关的工具,这对于理解并调试slab缓存功能很有帮助。 slabinfo介绍 slabinfo 不是普通系统命令,而是内核源码自带的官方调试工具。 它的源码位于内核源码树的tools/mm/slabinfo.c,由内核社区直接维护,…...
实战分享:如何用AST技术还原Akamai 2.0混淆后的JS代码(附避坑指南)
深入解析AST技术在Akamai 2.0 JS代码还原中的应用 现代Web安全防护体系中,代码混淆技术已成为保护前端逻辑的重要手段。作为行业领先的安全解决方案提供商,Akamai在其2.0版本中引入了更为复杂的JS混淆机制,这对逆向工程提出了新的挑战。本文将…...
Notepad++ 插件构想:集成Phi-4-mini-reasoning实现轻量级代码智能
Notepad 插件构想:集成Phi-4-mini-reasoning实现轻量级代码智能 1. 为什么Notepad需要AI插件 作为一个经典的轻量级文本编辑器,Notepad凭借其简洁高效的特点赢得了全球开发者的喜爱。但随着AI技术的快速发展,传统编辑器在代码智能辅助方面的…...
避坑指南:RK3588 HDMI输出分辨率不生效?除了改驱动,你还需要检查这几点
RK3588 HDMI输出分辨率调试实战:从代码修改到系统级排查 最近在调试RK3588平台的HDMI输出时,发现一个有趣的现象:明明按照官方文档和社区教程修改了内核驱动代码,添加了3840x216030Hz的分辨率支持,但系统设置里就是找不…...
G-Helper:重构华硕设备性能管理的轻量级解决方案 | 玩家与商务人士必备工具
G-Helper:重构华硕设备性能管理的轻量级解决方案 | 玩家与商务人士必备工具 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, …...
intv_ai_mk11效果展示:对复杂问题(如‘Transformer与CNN在NLP任务中差异’)的分层解析能力
intv_ai_mk11效果展示:对复杂问题的分层解析能力 1. 引言:AI对话机器人的进阶能力 在众多AI对话系统中,intv_ai_mk11展现出了独特的优势——它不仅能回答简单问题,更能对复杂技术概念进行结构化解析。今天我们将重点展示它在处理…...
AI开发-python-langchain框架(--EasyOCR图片文字提取 )访
本文能帮你解决什么? 1. 搞懂FastAPI异步(async/await)到底在什么场景下能真正提升性能。 2. 掌握在FastAPI中正确使用多线程处理CPU密集型任务的方法。 3. 避开常见的坑(比如阻塞操作、数据库连接池耗尽、GIL限制)。 …...
STM32+DHT11温湿度监测实战:从硬件接线到串口调试全流程(附避坑指南)
STM32DHT11温湿度监测实战:从硬件接线到串口调试全流程(附避坑指南) 在物联网和智能硬件快速发展的今天,环境监测已成为许多项目的基础需求。无论是智能家居中的温湿度调控,还是农业大棚中的环境监控,亦或是…...
