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);
    }
}

效果:

相关推荐
苹果醋333 分钟前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
Hello.Reader1 小时前
深入解析 Apache APISIX
java·apache
了一li1 小时前
Qt中的QProcess与Boost.Interprocess:实现多进程编程
服务器·数据库·qt
盛派网络小助手1 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
菠萝蚊鸭1 小时前
Dhatim FastExcel 读写 Excel 文件
java·excel·fastexcel
码农君莫笑1 小时前
信管通低代码信息管理系统应用平台
linux·数据库·windows·低代码·c#·.net·visual studio
旭东怪1 小时前
EasyPoi 使用$fe:模板语法生成Word动态行
java·前端·word
007php0072 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程
∝请叫*我简单先生2 小时前
java如何使用poi-tl在word模板里渲染多张图片
java·后端·poi-tl
别致的影分身2 小时前
使用C语言连接MySQL
数据库·mysql