JAVA导出数据库字典到Excel

文章目录


1、查询某张表字段信息

sql 复制代码
select column_name as columnName, -- 字段名
COLUMN_DEFAULT as colDefault,  -- 默认值
column_key as columnKey, -- PRI-主键,UNI-唯一键,MUL-外键
 column_comment as columnComment,  -- 字段中文名称
 column_type as columnType, -- 字段类型
 IS_NULLABLE as isNullLable -- 是否允许为空
 from information_schema.columns where table_schema = (select database()) and table_name = ('sys_role_dept') order by ordinal_position

2、TableVo接收sql查询得到的数据

java 复制代码
package com.dtt.web.domain.vo;
import lombok.Data;

@Data
public class TableVo {
    public String columnName; // 字段名
    public String colDefault; // 默认值
    public String columnKey; // PRI-主键,UNI-唯一键,MUL-外键
    public String columnComment; // 字段中文名称
    public String columnType; // 字段类型
    public String isNullLable; // 是否为空  YES,NO
}

3、excel导出

注意:需要hutool依赖

java 复制代码
@Test
public void exportTable(){
    String tableName = "ssa_store_info";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    List<TableVo> sysRoleDept = demoMapper.getList(tableName);
    List<Map<String, Object>> rows = sysRoleDept.stream().map(
        a -> {
            Map<String, Object> row = new LinkedHashMap<>();
            String PRI = "N"; // 主键
            String MUL = "N"; // 外键
            String UNI = "N"; // 唯一
            String defaultStr = "N";
            String isNotNull = "N"; // 是否非空
            if (a.getIsNullLable().equals("NO")) isNotNull = "Y";
            if (Strings.isNotBlank(a.getColDefault())) defaultStr = a.getColDefault();
            String columnKey = a.getColumnKey();
            if (columnKey.equals("PRI")) {
                PRI = "Y";
                UNI = "Y";
            }
            if (columnKey.equals("MUL")) MUL = "Y";
            if (columnKey.equals("UNI")) UNI = "Y";
            row.put("字段中文名", a.getColumnComment());
            row.put("字段名", a.getColumnName());
            row.put("数据类型", a.getColumnType());
            row.put("主键", PRI);
            row.put("外键", MUL);
            row.put("唯一", UNI);
            row.put("非空", isNotNull);
            row.put("缺省", defaultStr);
            row.put("描述", a.getColumnComment());
            return row;
        }
    ).collect(Collectors.toList());
    ExcelWriter writer = ExcelUtil.getWriter("e:/"+tableName+sdf.format(new Date())+".xlsx");
    // 微调一下每个列的宽度
    writer.setColumnWidth(0,16);
    writer.setColumnWidth(1,16);
    writer.setColumnWidth(2,16);
    writer.setColumnWidth(3,16);
    writer.setColumnWidth(4,16);
    writer.setColumnWidth(5,16);
    writer.setColumnWidth(6,16);
    writer.setColumnWidth(7,16);
    writer.setColumnWidth(8,16);
    //一次性写出内容,强制输出标题
    writer.write(rows, true);
    //关闭writer,释放内存
    writer.close();
    System.out.println();
}

4、导出案例

相关推荐
TDengine (老段)12 小时前
杨凌美畅用 TDengine 时序数据库,支撑 500 条产线 2 年历史数据追溯
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
摇滚侠12 小时前
Spring Boot3零基础教程,SpringApplication 自定义 banner,笔记54
java·spring boot·笔记
青云交12 小时前
Java 大视界 -- Java 大数据机器学习模型在游戏用户行为分析与游戏平衡优化中的应用
java·大数据·机器学习·数据存储·模型构建·游戏用户行为分析·游戏平衡优化
暗武逢天15 小时前
Java导出写入固定Excel模板数据
java·导出数据·easyexcel·excel固定模板导出
葛小白115 小时前
C#数据类型:string简单使用
服务器·数据库·c#
污斑兔15 小时前
MongoDB的$sample是啥?
数据库·mongodb
摇滚侠15 小时前
Spring Boot3零基础教程,KafkaTemplate 发送消息,笔记77
java·spring boot·笔记·后端·kafka
马丁的代码日记16 小时前
MySQL InnoDB 行锁与死锁排查实战演示
数据库·mysql
拍客圈17 小时前
数据主站+副站做的设置
数据库
计算机学长felix18 小时前
基于SpringBoot的“面向校园的助力跑腿系统”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·后端