欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库文档生成工具使用方法

程序员文章站 2022-03-15 19:39:32
...

数据库文档生成工具使用方法

使用工具screw

官方文档

数据库支持

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

文档生成支持

  • word

  • html

  • markdown

    我们这里统一使用word文档

整合的工具类

最好将生成类型和配置添加到test文件夹下。

引入依赖

        <!-- 必须添加 生成数据库文档-->
        <dependency>
            <groupId>cn.smallbun.screw</groupId>
            <artifactId>screw-core</artifactId>
            <version>1.0.5</version>
            <scope>test</scope>
        </dependency>

        <!--  可选  lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.6</version>
        </dependency>

生成类

import cn.smallbun.screw.core.Configuration;
import cn.smallbun.screw.core.engine.EngineConfig;
import cn.smallbun.screw.core.engine.EngineFileType;
import cn.smallbun.screw.core.engine.EngineTemplateType;
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;

/**
 * @description: <br/>
 * 生成数据库文档
 * <p>
 * <br/>
 * @author: Qz1997
 * @create 2021/7/28 9:23
 */
public class GenerationDatabaseWord {
    /**
     * 生成数据库文档
     *
     * @param args 服务运行参数
     */
    public static void main(String[] args) {
        GenerationDataBaseParam param = new GenerationDataBaseParam();
        // 数据库驱动类
        param.setDriverClassName("com.mysql.cj.jdbc.Driver");
        // 数据库地址 注意添加: characterEncoding=utf-8 指定字符集
        param.setJdbcUrl("jdbc:mysql://localhost:3306/qzboot?serverTimezone=GMT%2B8&useSSL=false&useOldAliasMetadataBehavior=true&useUnicode=true&characterEncoding=utf8");
        // 数据库用户名
        param.setUsername("root");
        // 数据库密码
        param.setPassword("root");
        // 生成文档路径
        param.setFileOutputDir("C:\\Users\\Administrator\\Desktop\\");
        // 生成文档名称 注意: 不需要加文件后缀
        param.setFileName("测试数据库文档");
        // 文档版本
        param.setVersion("1.0.0");
        // 文档描述
        param.setDescription("数据库设计文档生成");

        // 生成逻辑
        ProcessConfig processConfig = ProcessConfig.builder().build();
        // 指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时,将生成指定表,其余表不生成、并跳过忽略表配置
        // ProcessConfig processConfig = ProcessConfig.builder()
        //         // 根据名称指定表生成
        //         .designatedTableName(new ArrayList<>())
        //         // 根据表前缀生成
        //         .designatedTablePrefix(new ArrayList<>())
        //         // 根据表后缀生成
        //         .designatedTableSuffix(new ArrayList<>())
        //         // 忽略表名
        //         .ignoreTableName(ignoreTableName)
        //         // 忽略表前缀
        //         .ignoreTablePrefix(ignorePrefix)
        //         // 忽略表后缀
        //         .ignoreTableSuffix(ignoreSuffix).build();
        GenerationDatabaseWord.documentGeneration(param, processConfig);
    }

    /**
     * 文档生成
     *
     * @param param         生成文档相关参数
     * @param processConfig 生成逻辑
     */
    private static void documentGeneration(GenerationDataBaseParam param, ProcessConfig processConfig) {
        // 数据源
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setDriverClassName(param.getDriverClassName());
        hikariConfig.setJdbcUrl(param.getJdbcUrl());
        hikariConfig.setUsername(param.getUsername());
        hikariConfig.setPassword(param.getPassword());
        // 设置可以获取tables remarks信息
        hikariConfig.addDataSourceProperty("useInformationSchema", "true");
        hikariConfig.setMinimumIdle(2);
        hikariConfig.setMaximumPoolSize(5);
        DataSource dataSource = new HikariDataSource(hikariConfig);
        // 生成配置
        EngineConfig engineConfig = EngineConfig.builder().fileOutputDir(param.getFileOutputDir())
                // 生成文件后是否打开文件夹
                .openOutputDir(true)
                // 生成文档类型 我们这里统一使用 word
                .fileType(EngineFileType.WORD)
                // 模版引擎选择 我们这里统一使用 freemarker
                .produceType(EngineTemplateType.freemarker)
                .fileName(param.getFileName()).build();
        // 配置
        Configuration config = Configuration.builder().version(param.getVersion()).description(param.getDescription())
                .dataSource(dataSource).engineConfig(engineConfig).produceConfig(processConfig).build();
        // 执行生成
        new DocumentationExecute(config).execute();
    }
}

配置类

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * @description: <br/>
 * 生成配置项
 * <p>
 * <br/>
 * @author: Qz1997
 * @create 2021/7/28 9:46
 */
// 如果没有lombok 自行删除注解 生成get set 方法
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class GenerationDataBaseParam implements Serializable {
    private static final long serialVersionUID = 4588256220056333589L;

    /**
     * 数据库驱动
     */
    private String driverClassName;
    /**
     * 数据库地址
     */
    private String jdbcUrl;
    /**
     * 数据库用户名
     */
    private String username;
    /**
     * 数据库密码
     */
    private String password;
    /**
     * 文档生成地址
     */
    private String fileOutputDir;
    /**
     * 文件名称
     */
    private String fileName;
    /**
     * 文档版本
     */
    private String version;
    /**
     * 文档描述
     */
    private String description;
}