(场景题)Java 导出 Excel 的两种方式

在后端开发中,经常会遇到这样的需求:

把数据库里的数据导出为 Excel 表格,方便运营、测试或者产品部门查看。

其实有两种思路:

  1. 直接在 IntelliJ IDEA 里导出表数据(不用写一行代码)

  2. 用阿里巴巴的 EasyExcel 框架,通过 Java 程序生成 Excel 文件

下面详细讲解两种方式。


🧩 一、方法一:IntelliJ IDEA 自带导出功能(不用写代码)

如果只是想临时导出表数据,比如看一眼 user 表里的内容,那完全没必要写接口。

IDEA 自带数据库管理功能,几步就能搞定:

✅ 步骤 1:连接数据库

  1. 打开右侧的 Database 面板(如果没看到,点菜单 View → Tool Windows → Database)。

  2. 点击 "+" ➜ 选择数据库类型(MySQL / PostgreSQL / Oracle 等)。

  3. 输入数据库地址、用户名、密码,点 Test Connection。

  4. 连接成功后,可以看到所有表结构。

✅ 步骤 2:导出表为 Excel

  1. 在 Database 面板中找到目标表,例如 user。

  2. 右键表名 → 选择 Export Data → To File。

  3. 在导出窗口中选择文件类型:

    Excel File (*.xlsx)

  4. 选择保存路径,点击 OK。

  5. IDEA 就会自动帮你生成一个 Excel 文件,内容就是这张表的所有数据。

✅ 步骤 3(可选):导出部分数据

如果你只想导出部分数据:

  1. 双击表名 → 打开数据视图。

  2. 在顶部输入 SQL,比如:

    SELECT id, name, email FROM user WHERE age > 18;

  3. 选中结果集 → 右键 → Export → Excel File。

优点:

  • 不写代码,操作简单。

  • 支持筛选数据、指定列。

缺点:

  • 只能手动操作,不能给前端接口下载。

🧠 二、方法二:使用阿里巴巴 EasyExcel 导出数据库数据(后端接口)

如果你需要让前端点击按钮就下载 Excel,那么用 EasyExcel 最合适。

它比 Apache POI 更轻量、更快,也不会占太多内存。


✅ 1. 引入依赖(Maven)

java 复制代码
<dependency>

<groupId>com.alibaba</groupId>

<artifactId>easyexcel</artifactId>

<version>3.3.2</version>

</dependency>

✅ 2. 创建导出实体类(对应 Excel 的列)

java 复制代码
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

@Data
public class UserExcelVO {
    @ExcelProperty("用户ID")
    private Long id;

    @ExcelProperty("用户名")
    private String name;

    @ExcelProperty("邮箱")
    private String email;
}

✅ 3. 写 Controller 接口导出

java 复制代码
import com.alibaba.excel.EasyExcel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;

@RestController
public class UserController {

    private final UserMapper userMapper;

    public UserController(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    @GetMapping("/exportUsers")
    public void exportUsers(HttpServletResponse response) throws IOException {
        // 设置响应头
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        String fileName = URLEncoder.encode("用户信息", "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");

        // 查询数据库数据
        List<UserExcelVO> list = userMapper.selectUserListForExcel();

        // 写出 Excel
        EasyExcel.write(response.getOutputStream(), UserExcelVO.class)
                .sheet("用户数据")
                .doWrite(list);
    }
}

✅ 4. MyBatis 查询语句

java 复制代码
@Mapper
public interface UserMapper {
    @Select("SELECT id, name, email FROM user")
    List<UserExcelVO> selectUserListForExcel();
}

✅ 5. 启动项目,访问下载

启动 Spring Boot 项目后,向接口发起请求,浏览器就会自动下载一个名为「用户信息.xlsx」的文件,数据来自数据库。


🧮 对比总结

场景 推荐方式 特点
临时导出表数据 IntelliJ IDEA 导出 无需写代码
系统需要导出功能 EasyExcel 可做成后端接口
大文件导出(>10W 行) EasyExcel 高性能,内存占用低
格式复杂(样式、公式) Apache POI(备用) 功能最全但笨重

🧠小结

  • 想临时看数据 → 用 IDEA 自带导出,几秒钟搞定。

  • 想让前端点击下载 Excel → 用 EasyExcel 写个简单接口。

两者结合起来,一个是「方便测试」,一个是「上线功能」。

相关推荐
kimnoic3 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
架构技术专栏3 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
别动我齐刘海4 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
码事漫谈4 小时前
你让AI干的活,它可能只干了十分之一——而你根本看不出来
后端
必须得开心呀4 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python
Wx-bishekaifayuan4 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
Wx-bishekaifayuan5 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
code2cat5 小时前
Java进阶篇之AtomicLongFieldUpdater:把累计额度留在对象字段中
java·cas·并发编程
WeiXin_DZbishe5 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
泡茶喝茶写代码5 小时前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口