一、概述
近期有个需求是写个java程序从数据库导出excel表格,我寻思数据库本身不就有这个操作吗。略过中间的各种疑问,最后还是写出来了这么个东西。
由于时间仓促,粗略浏览了这些官网。但并不能让我短暂学习(其实就是抄袭)后快速输出一个解决眼下问题的程序。所以咱也没想着去官网花太多时间。
查询了很多博客,poi、easy-poi、easy-excel差不多就这三个吧。并未找到文章能解决我的需求,其实我的需求只是无实体类导出excel,但看的好多博客基本都是注解式操作或pojo.Class映射并不适合我的业务场景,不过好在最后找了一篇poi的博客成功解决了我的痛点。
灵感来源:https://blog.csdn.net/weixin_43100896/article/details/91352208
仓库地址:https://gitee.com/awthirdly/test-poi
no more nonsense,show u my code.
二、pom依赖
个人测试用的swagger。ps:swagger3的路径为host:port/swagger-ui/
<dependencies>
<!--
A.SpringBoot-starter
B.SpringBoot-starter-jdbc
C.SpringBoot-starter-web
1.mysql-connector
2.swagger3
3.poi
-->
<!--[A.SpringBoot-starter]-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--[B.SpringBoot-starter-jdbc]-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--[C.SpringBoot-starter-web]-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--[1.mysql-connector]-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--[2.swagger3]-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<!--[3.poi]-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.0</version>
</dependency>
</dependencies>
三、SpringBoot配置文件
就一个端口号
server:
port: 14382
四、代码
注意:这里的代码全是在一个类(DataExportUtil)中,我这里拆分开分别说明作用。
内部类
主要用于封装数据表的表结构,后续需要更多字段信息可以在这里添加,并在查询表结构方法中封装对应的值。这里暂时封装了3个,但也只是用到了一个列名。
/**
* 表字段属性
* @author Awthirdly
* @date 2022/3/14
*/
private static class TableData {
/**
* 列名
*/
private String columnName;
/**
* 数据类型
*/
private String dataType;
/**
* 列注释
*/
private String columnComment;
public TableData(String columnName, String dataType, String columnComment) {
this.columnName = columnName;
this.dataType = dataType;
this.columnComment = columnComment;
}
@Override
public String toString() {
return "TableField{" +
"columnName='" + columnName + '\'' +
", dataType='" + dataType + '\'' +