SpringBoot 数据库表结构文档生成

news2024/11/13 15:26:46

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

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

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

生产文档支持

  •  html
  •  word
  •  markdown

开始

添加依赖

        <!-- 螺丝钉 -->
        <dependency>
            <groupId>cn.smallbun.screw</groupId>
            <artifactId>screw-core</artifactId>
            <version>1.0.5</version>
        </dependency>

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

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

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;

}

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


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

效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2152090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CompletableFuture-详解使用及源码解析

背景 上一篇文章我们看了FutureTask&#xff0c;分析了他的问题&#xff0c;异步编程并不方便。 问题1&#xff1a; FutureTask获取执行结果前&#xff0c;主线程需要通过get()方法一直阻塞等待子线程执行完成call方法&#xff0c;才可以拿到返回结果问题2&#xff1a;如果不…

电竞显示器哪个牌子好

电竞显示器哪个好&#xff1f;你想成为电竞选手吗&#xff1f;显示器很关键&#xff0c;下面我就列举7款市面流行的电竞显示器给大家看看&#xff0c;总有一款适合你。 1.电竞显示器哪个好 - 蚂蚁电竞 ANT255VF电竞显示器 一、产品概述 蚂蚁电竞 ANT255VF电竞显示器是一款专为…

2024/9/21 leetcode 21.合并两个有序链表 2.两数相加

目录 21.合并两个有序链表 题目描述 题目链接 解题思路与代码 2.两数相加 题目描述 题目链接 解题思路与代码 --------------------------------------------------------------------------- 21.合并两个有序链表 题目描述 将两个升序链表合并为一个新的 升序 链表并返…

ChatCADChatCAD+:Towards a Universal and Reliable Interactive CAD using LLMs

ChatCAD&#xff08;论文链接&#xff1a;[2302.07257] ChatCAD: Interactive Computer-Aided Diagnosis on Medical Image using Large Language Models (arxiv.org)&#xff09; 网络流程图&#xff1a; 辅助阅读&#xff1a; 基于大型语言模型的医学图像交互式计算机辅助诊…

【运维自动化-作业平台】如何使用全局变量之字符串类型?

使用变量是脚本很常见的处理场景&#xff0c;作业平台中主要有全局变量和魔法变量两类&#xff0c;全局变量又区分了字符串、命名空间、主机列表、密文、数组5种类型。字符串类型变量 最简单、使用频率最高的全局变量类型&#xff0c;可以跨主机、跨步骤使用。目前在作业平台中…

uniApp微信小程序扫描普通二维码跳转到小程序指定页面操作方法

这篇文章主要给大家介绍了关于微信小程序扫描普通二维码跳转到小程序指定页面操作的相关资料,需要的朋友可以参考下 1、首先我们需要在微信公众平台的开发管理——>开发设置&#xff0c;找到&#xff08;扫普通链接二维码打开小程序&#xff09;&#xff0c;点击添加,根据提…

vue3-05-Element-plus中表单校验:校验对象中的对象的属性,校验对象中的数组中的对象的属性,校验嵌套对象

目录 一、校验对象中的普通属性二、校验对象中对象的属性三、校验对象中的数组中的对象的属性 这两天写vue3项目&#xff0c;用了element-plus库&#xff0c;到了表单规则验证的环节&#xff0c;我发现我只会校验对象中的普通属性&#xff0c;如果校验嵌套对象&#xff0c;我就…

ML 系列:多元线性回归 (MLR)(04)

图 1.多元线性回归与简单线性回归 一、说明 线性回归从一维推广到多维&#xff0c;这与单变量线性回归有很多不同&#xff0c;情况更加复杂&#xff0c;而在梯度优化也需要改成向量梯度&#xff0c;同时&#xff0c;数据预处理也成了必要步骤。 二、综述 多元线性回归是简单线性…

C++:分苹果【排列组合】

描述 把M个同样的苹果放到N个同样的盘子里&#xff0c;允许有的盘子空着不放&#xff0c;问共有多少种不同的分法&#xff1f;&#xff08;用K表示&#xff09;&#xff0c;5&#xff0c;1&#xff0c;1和1&#xff0c;5&#xff0c;1是同一种分法。 输入描述 两个整数M和N&…

C语言 | Leetcode C语言题解之第420题强密码检验器

题目&#xff1a; 题解&#xff1a; #define MAX(a, b) ((a) > (b) ? (a) : (b)) #define MIN(a, b) ((a) < (b) ? (a) : (b))int strongPasswordChecker(char * password) {int n strlen(password);bool has_lower false, has_upper false, has_digit false;for …

YOLOv9改进系列,YOLOv9主干网络替换为RepViT (CVPR 2024,清华提出,独家首发),助力涨点

摘要 轻量级视觉变换器(ViTs)在资源受限的移动设备上表现出优越的性能和较低的延迟,相比之下轻量级卷积神经网络(CNNs)稍显逊色。研究人员发现了许多轻量级 ViTs 和轻量级 CNNs 之间的结构联系。然而,它们在块结构、宏观和微观设计上的显著架构差异尚未得到充分研究。在…

【重磅发布】大模型在金融领域的价值、治理和生态进阶之路白皮书

引言 金融行业天然具备数据和信息密集型的特点,在数字化成熟度方面处于领先地位。此外,金融行业的数字化投入持续稳步增长,汇集了大量具备数字化技能的人才。这些优势使得金融行业在AI技术的应用和创新方面具备独特的条件,能够在推动技术革新和提升行业效率方面起到示范作…

NLP(二)-文本表示

One-hot One-hot&#xff08;独热&#xff09;编码是一种最简单的文本表示方式。如果有一个大小为V的词表&#xff0c;对于第i个词$w_i$&#xff0c;可以用一个长度为V的向量来表示&#xff0c;其中第i个元素为1&#xff0c;其它为0.例如&#xff1a; 减肥&#xff1a;[1, 0,…

59.【C语言】内存函数(memmove函数)

目录 2.memove函数 *简单使用 部分翻译 *模拟实现 方案1 方案2 1.有重叠 dest在src左侧 dest在src右侧 2.无重叠 代码 2.memove函数 *简单使用 memove:memory move cplusplus的介绍 点我跳转 对比第59篇的memcpy函数 对比memmcpy函数的介绍如下区别: 部分翻译 m…

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL59

根据RTL图编写Verilog程序 描述 根据以下RTL图&#xff0c;使用 Verilog HDL语言编写代码&#xff0c;实现相同的功能&#xff0c;并编写testbench验证功能。 输入描述&#xff1a; clk&#xff1a;系统时钟信号 rst_n&#xff1a;复位信号&#xff0c;低电平有效 data_in…

js 获取树节点上某节点的最底层叶子节点数据

效果图 数据为某一个节点对象 递归代码 function getLeafNodes(node) {if (!node.children || node.children.length 0) {// 如果是叶子节点&#xff0c;返回它的数据return [node.data];}// 如果节点有子节点&#xff0c;递归获取所有叶子节点的数据return node.children.…

基于误差状态的卡尔曼滤波

基于误差状态的卡尔曼滤波ESKF 注意这里的观测方程&#xff0c;是IMU的误差状态和激光定位的差值得到的。

JavaWeb---三层架构

文章目录 1. 为什么需要分层&#xff1f;2.软件设计中的分层模式3.分层4.三层架构&#xff1a;显示层、业务逻辑层、数据访问层3. 案例&#xff1a;利用三层架构原理实现编写web程序的流程 摘自&#xff1a;https://blog.csdn.net/qq_64001795/article/details/124112824 1. 为…

Qt日志输出及QsLog日志库

目录 Qt日志输出及QsLog日志库日志输出格式化日志普通格式化条件格式化环境变量设置格式化日志输出位置日志输出对象信息禁用输出 QsLog日志库使用方法1. 将QsLog目录添加到项目中2. 配置CMakeLists.txt文件3. 配置.pro文件4. 日志记录器的配置5. 运行程序6. 启用行号和文件名C…

Why is OpenAI image generation Api returning 400 bad request in Unity?

题意&#xff1a;为什么 OpenAI 图像生成 API 在 Unity 中返回 400 Bad Request 错误&#xff1f; 问题背景&#xff1a; Im testing out dynamically generating images using OpenAI API in Unity. Amusingly, I actually generated most of this code from chatGPT. 我正在…