SpringBoot 数据库表结构文档生成

官方地址:https://github.com/pingfangushi/screw

screw 螺丝钉,支持以下数据库

  • MySQL
  • MariaDB
  • TIDB
  • Oracle
  • SqlServer
  • PostgreSQL
  • Cache DB(2016)

生产文档支持

  • html
  • word
  • markdown

开始

添加依赖

XML 复制代码
        <!-- 螺丝钉 -->
        <dependency>
            <groupId>cn.smallbun.screw</groupId>
            <artifactId>screw-core</artifactId>
            <version>1.0.5</version>
        </dependency>

新建执行方法,当然可以使用juint或者controller,怎么方便怎么弄

只需要修改这些个常量就可以,不需要太多改动

java 复制代码
import cn.smallbun.screw.core.engine.EngineFileType;
import cn.smallbun.screw.core.engine.EngineTemplateType;

import java.util.ArrayList;
import java.util.List;

/**
 * @Description 数据库文档一键生产
 * @Author WangKun
 * @Date 2024/9/20 15:45
 * @Version
 */
public class GenerateDatabaseDocument {

    /**
     * @param args
     * @Description 数据文档
     * @Throws
     * @Return void
     * @Date 2024-09-20 16:34:50
     * @Author WangKun
     **/
    public static void main(String[] args) {
        DatabaseDocumentExecute.documentationExecute();
    }

    // 以下为数据库设置
    // 驱动
    public static final String DRIVER = "com.mysql.cj.jdbc.Driver";
    // 主机
    public static final String HOST = "127.0.0.1";
    // 端口号
    public static final String PORT = "3306";
    // 数据库
    public static final String DB = "数据库";
    // URL
    public static final String URL = "jdbc:mysql://" + HOST + ":" + PORT + "/" + DB + "?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
    // 用户名
    public static final String USER_NAME = "用户名";
    // 密码
    public static final String PASSWORD = "密码";

    // 以下库表设置
    // 忽略表名,多个使用逗号隔开,"",""
    public static final List<String> IGNORE_TABLE_NAME = List.of("");
    // 忽略表前缀,多个使用逗号隔开,"",""
    public static final List<String> IGNORE_PREFIX = List.of("t_", "c_");
    // 忽略表后缀,多个使用逗号隔开,"",""
    public static final List<String> IGNORE_SUFFIX = List.of("_t", "_c");

    // 以下是表指定生成
    // 指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时,将生成指定表,其余表不生成、并跳过忽略表配置
    // 根据名称指定表生成
    public static final List<String> DESIGNATED_TABLE_NAME = new ArrayList<>();
    // 根据表前缀生成
    public static final List<String> DESIGNATED_TABLE_PREFIX = new ArrayList<>();
    // 根据表后缀生成
    public static final List<String> DESIGNATED_TABLE_SUFFIX = new ArrayList<>();

    //以下为生产文档设置
    // 文件名称
    public static final String FILE_NAME = "数据库文档";
    // 版本
    public static final String VERSION = "V1.0.0";
    // 文档描述
    public static final String DESCRIPTION = "数据库文档说明";
    // 输出路径
    public static final String OUTPUT_DIR = System.getProperty("user.home") + "/Desktop";
    // 文档生成类型
    public static final EngineFileType FILE_TYPE = EngineFileType.HTML;
    // 文档生成模板
    public static final EngineTemplateType PRODUCE_TYPE = EngineTemplateType.freemarker;

}

文档生产配置(这一块基本不需要动,只需要改动常量配置即可)

java 复制代码
import cn.smallbun.screw.core.Configuration;
import cn.smallbun.screw.core.engine.EngineConfig;
import cn.smallbun.screw.core.execute.DocumentationExecute;
import cn.smallbun.screw.core.process.ProcessConfig;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import javax.sql.DataSource;

import static com.harmonywisdom.GenerateDatabaseDocument.*;

/**
 * @Description 文档生产配置
 * @Author WangKun
 * @Date 2024/9/20 10:51
 * @Version
 */
public class DatabaseDocumentExecute {

    /**
     * @Description 生产文档
      * @param
     * @Throws
     * @Return void
     * @Date 2024-09-20 17:02:40
     * @Author WangKun
     **/
    public static void documentationExecute(){
        // 数据源
        DataSource dataSource = getDataSource();
        // 生成配置
        EngineConfig engineConfig = EngineConfig.builder()
                // 生成文件路径
                .fileOutputDir(OUTPUT_DIR)
                // 打开目录
                .openOutputDir(false)
                // 文件类型
                .fileType(FILE_TYPE)
                // 生成模板实现
                .produceType(PRODUCE_TYPE)
                // 自定义文件名称
                .fileName(FILE_NAME)
                .build();


        // 配置忽略的表
        ProcessConfig processConfig = ProcessConfig.builder()
                //指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时,将生成指定表,其余表不生成、并跳过忽略表配置
                .designatedTableName(DESIGNATED_TABLE_NAME)
                .designatedTablePrefix(DESIGNATED_TABLE_PREFIX)
                .designatedTableSuffix(DESIGNATED_TABLE_SUFFIX)
                .ignoreTableName(IGNORE_TABLE_NAME)
                .ignoreTablePrefix(IGNORE_PREFIX)
                .ignoreTableSuffix(IGNORE_SUFFIX)
                .build();

        // 生成文档配置(包含以下自定义版本号、描述等配置连接)
        Configuration config = Configuration.builder()
                // 版本
                .version(VERSION)
                // 文档描述
                .description(DESCRIPTION)
                // 数据源
                .dataSource(dataSource)
                // 生产配置
                .engineConfig(engineConfig)
                // 忽略配置
                .produceConfig(processConfig)
                .build();
        // 执行生成
        new DocumentationExecute(config).execute();
    }

    /**
     * @Description 数据源配置
     * @param
     * @Throws
     * @Return javax.sql.DataSource
     * @Date 2024-09-20 16:25:31
     * @Author WangKun
     **/
    public static DataSource getDataSource() {
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setDriverClassName(DRIVER);
        hikariConfig.setJdbcUrl(URL);
        hikariConfig.setUsername(USER_NAME);
        hikariConfig.setPassword(PASSWORD);
        // 设置可以获取tables remarks信息
        hikariConfig.addDataSourceProperty("useInformationSchema", "true");
        hikariConfig.setMinimumIdle(2);
        hikariConfig.setMaximumPoolSize(5);
        return new HikariDataSource(hikariConfig);
    }
}

效果:

相关推荐
..过云雨5 分钟前
17-2.【Linux系统编程】线程同步详解 - 条件变量的理解及应用
linux·c++·人工智能·后端
酸菜牛肉汤面6 分钟前
23、varchar与char的区别
数据库
Da Da 泓6 分钟前
多线程(七)【线程池】
java·开发语言·线程池·多线程
To Be Clean Coder16 分钟前
【Spring源码】getBean源码实战(三)
java·mysql·spring
AI题库21 分钟前
PostgreSQL 18 从新手到大师:实战指南 - 2.5 Serverless PostgreSQL
数据库·postgresql·serverless
IT技术分享社区24 分钟前
数据库实战:MySQL多表更新JOIN操作的底层原理与性能调优指南
数据库·mysql·程序员
廋到被风吹走29 分钟前
【数据库】【Oracle】分区表与大表设计
数据库·oracle
Wokoo730 分钟前
开发者AI大模型学习与接入指南
java·人工智能·学习·架构
南山乐只36 分钟前
【Spring AI 开发指南】ChatClient 基础、原理与实战案例
人工智能·后端·spring ai
电摇小人1 小时前
我的“C++之旅”(博客之星主题作文)
java·开发语言