1. 程式人生 > 其它 >screw 庫,簡潔好用的資料庫表結構文件生成器

screw 庫,簡潔好用的資料庫表結構文件生成器

<!-- screw 庫,簡潔好用的資料庫表結構文件生成器 -->
<dependency>
<groupId>cn.smallbun.screw</groupId>
<artifactId>screw-core</artifactId>
<version>1.0.5</version>
</dependency>

package com.zhss.eshop.utils;

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;
import java.util.Arrays;
import java.util.Collections;

/**
 * @ClassName TestScrewMain
 * @Description TODO 使用 screw 生成文件
 * @Author NingShi
 * @Date 2021/5/10 16:51
 * @Version 1.0
 */
public class TestScrewMain {
    private static final String DB_URL = "jdbc:mysql://localhost:3306";
    private static final String DB_NAME = "eshop?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai";
    private static final String DB_USERNAME = "root";
    private static final String DB_PASSWORD = "Liwei123.";

    private static final String FILE_OUTPUT_DIR = "F:\\";
    // 可以設定 Word 或者 Markdown 格式
    private static final EngineFileType FILE_OUTPUT_TYPE = EngineFileType.WORD;
    private static final String DOC_FILE_NAME = "資料庫字典文件";
    private static final String DOC_VERSION = "V1.0.0";
    private static final String DOC_DESCRIPTION = "文件描述";

    public static void main(String[] args) {
        // 建立 screw 的配置
        Configuration config = Configuration.builder()
                // 版本
                .version(DOC_VERSION)
                // 描述
                .description(DOC_DESCRIPTION)
                // 資料來源
                .dataSource(buildDataSource())
                // 引擎配置
                .engineConfig(buildEngineConfig())
                // 處理配置
                .produceConfig(buildProcessConfig())
                .build();

        // 執行 screw,生成資料庫文件
        new DocumentationExecute(config).execute();
    }

    /**
     * 建立資料來源
     */
    private static DataSource buildDataSource() {
        // 建立 HikariConfig 配置類
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setDriverClassName("com.mysql.jdbc.Driver");
        hikariConfig.setJdbcUrl(DB_URL + "/" + DB_NAME);
        hikariConfig.setUsername(DB_USERNAME);
        hikariConfig.setPassword(DB_PASSWORD);
        // 設定可以獲取 tables remarks 資訊
        hikariConfig.addDataSourceProperty("useInformationSchema", "true");
        // 建立資料來源
        return new HikariDataSource(hikariConfig);
    }

    /**
     * 建立 screw 的引擎配置
     */
    private static EngineConfig buildEngineConfig() {
        return EngineConfig.builder()
                // 生成檔案路徑
                .fileOutputDir(FILE_OUTPUT_DIR)
                // 開啟目錄
                .openOutputDir(false)
                // 檔案型別
                .fileType(FILE_OUTPUT_TYPE)
                // 檔案型別
                .produceType(EngineTemplateType.freemarker)
                // 自定義檔名稱
                .fileName(DOC_FILE_NAME)
                .build();
    }

    /**
     * 建立 screw 的處理配置,一般可忽略
     * 指定生成邏輯、當存在指定表、指定表字首、指定表字尾時,將生成指定表,其餘表不生成、並跳過忽略表配置
     */
    private static ProcessConfig buildProcessConfig() {
        return ProcessConfig.builder()
                // 根據名稱指定表生成
                .designatedTableName(Collections.<String>emptyList())
                // 根據表字首生成
                .designatedTablePrefix(Collections.<String>emptyList())
                // 根據表字尾生成
                .designatedTableSuffix(Collections.<String>emptyList())
                // 忽略表名
                .ignoreTableName(Arrays.asList("test", "mytable","role","t_role","t_user"))
                // 忽略表字首
                //.ignoreTablePrefix(Collections.singletonList("t_"))
                // 忽略表字尾
                //.ignoreTableSuffix(Collections.singletonList("_test"))
                .build();
    }
}