在后端开发中,经常会遇到这样的需求:
把数据库里的数据导出为 Excel 表格,方便运营、测试或者产品部门查看。
其实有两种思路:
-
直接在 IntelliJ IDEA 里导出表数据(不用写一行代码)
-
用阿里巴巴的 EasyExcel 框架,通过 Java 程序生成 Excel 文件
下面详细讲解两种方式。
🧩 一、方法一:IntelliJ IDEA 自带导出功能(不用写代码)
如果只是想临时导出表数据,比如看一眼 user 表里的内容,那完全没必要写接口。
IDEA 自带数据库管理功能,几步就能搞定:
✅ 步骤 1:连接数据库
-
打开右侧的 Database 面板(如果没看到,点菜单
View → Tool Windows → Database)。 -
点击 "+" ➜ 选择数据库类型(MySQL / PostgreSQL / Oracle 等)。
-
输入数据库地址、用户名、密码,点 Test Connection。
-
连接成功后,可以看到所有表结构。
✅ 步骤 2:导出表为 Excel
-
在 Database 面板中找到目标表,例如
user。 -
右键表名 → 选择 Export Data → To File。
-
在导出窗口中选择文件类型:
Excel File (*.xlsx) -
选择保存路径,点击 OK。
-
IDEA 就会自动帮你生成一个 Excel 文件,内容就是这张表的所有数据。
✅ 步骤 3(可选):导出部分数据
如果你只想导出部分数据:
-
双击表名 → 打开数据视图。
-
在顶部输入 SQL,比如:
SELECT id, name, email FROM user WHERE age > 18; -
选中结果集 → 右键 → 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 写个简单接口。
两者结合起来,一个是「方便测试」,一个是「上线功能」。