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

效果:

相关推荐
BestandW1shEs1 分钟前
彻底理解消息队列的作用及如何选择
java·kafka·rabbitmq·rocketmq
爱吃烤鸡翅的酸菜鱼3 分钟前
Java算法OJ(8)随机选择算法
java·数据结构·算法·排序算法
数字扫地僧6 分钟前
WebLogic 版本升级的注意事项与流程
数据库
码蜂窝编程官方7 分钟前
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的虎鲸旅游攻略网的设计与实现
java·vue.js·spring boot·后端·spring·旅游
Viktor_Ye23 分钟前
高效集成易快报与金蝶应付单的方案
java·前端·数据库
hummhumm25 分钟前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
一二小选手29 分钟前
【Maven】IDEA创建Maven项目 Maven配置
java·maven
J老熊35 分钟前
JavaFX:简介、使用场景、常见问题及对比其他框架分析
java·开发语言·后端·面试·系统架构·软件工程
猿java40 分钟前
什么是 Hystrix?它的工作原理是什么?
java·微服务·面试
AuroraI'ncoding41 分钟前
时间请求参数、响应
java·后端·spring