【Java】Mysql文档生成工具

资料参考:

https://blog.csdn.net/weixin_43797561/article/details/122809269
https://blog.csdn.net/qq_33177268/article/details/124325242

 

新建Maven工程:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.cloud9</groupId>
    <artifactId>MySQL-Document</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--文档生成工具 -->
        <dependency>
            <groupId>cn.smallbun.screw</groupId>
            <artifactId>screw-core</artifactId>
            <version>1.0.5</version>
        </dependency>

        <!--数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>8.0.25</version>
        </dependency>

        <!--数据库连接池 -->
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>2.5.1</version>
        </dependency>

        <!-- ini 配置读取 -->
        <dependency>
            <groupId>org.ini4j</groupId>
            <artifactId>ini4j</artifactId>
            <version>0.5.4</version>
        </dependency>

        <!--————————————————-->
        <!--版权声明:本文为CSDN博主「风华正茂_Yang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。-->
        <!--原文链接:https://blog.csdn.net/weixin_43797561/article/details/122809269-->
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.0.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.0</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>Application</mainClass>
                                    <!-- 主类的位置,例如上图文件,主类配置应为: -->
                                    <!-- <mainClass>top.nihilwater.App</mainClass> -->
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

  

启动类编写:

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 org.ini4j.Profile;
import org.ini4j.Wini;

import javax.sql.DataSource;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @projectName: MySQLDocument
 * @author: Cloud9
 * @date: 2022年05月26日 16:23
 * @version: 1.0
 */
public class Application {

    private static Wini configFile;

    static {
        try {
            configFile = new Wini(new File("config.ini"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 数据源初始化
     * @param
     * @return javax.sql.DataSource
     * @author Cloud9
     * @createTime 2022/5/26 17:26
     *
     */
    private static DataSource initDataSource() {
        try {
            Profile.Section section = configFile.get("mysql-config");
            //数据源
            HikariConfig hikariConfig = new HikariConfig();
            hikariConfig.setDriverClassName(section.get("driverClassname"));
            hikariConfig.setJdbcUrl(section.get("jdbcUrl"));
            hikariConfig.setUsername(section.get("username"));
            hikariConfig.setPassword(section.get("password"));
            //设置可以获取tables remarks信息
            final String TABLE_REMARK = "useInformationSchema";
            hikariConfig.addDataSourceProperty(TABLE_REMARK, section.get(TABLE_REMARK, "true"));
            hikariConfig.setMinimumIdle(Integer.parseInt(section.get("min-idle", "2")));
            hikariConfig.setMaximumPoolSize(Integer.parseInt(section.get("max-pool-size", "10")));
            return new HikariDataSource(hikariConfig);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 模板引擎初始化
     * @return cn.smallbun.screw.core.engine.EngineConfig
     * @author Cloud9
     * @createTime 2022/5/26 17:31
     */
    private static EngineConfig initEngineConfig() {
        Profile.Section section = configFile.get("template-engine-config");

        //生成配置
        return EngineConfig.builder()
            //生成文件路径
            .fileOutputDir(section.get("output-dir", ".\\"))
            //打开目录
            .openOutputDir(true)
            //文件类型
            .fileType(EngineFileType.HTML)
            //生成模板实现
            .produceType(EngineTemplateType.freemarker)
            //自定义文件名称
            .fileName(section.get("file-name", "测试案例"))
            .build();
    }

    /**
     * 处理配置初始化
     * @return cn.smallbun.screw.core.engine.EngineConfig
     * @author Cloud9
     * @createTime 2022/5/26 17:31
     */
    private static ProcessConfig initProcessConfig() {
        Profile.Section section = configFile.get("ignore-config");
        Profile.Section designateSection = configFile.get("designate-config");

        if (null == section && null == designateSection) return ProcessConfig.builder().build();

        return ProcessConfig.builder()
            //指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时,将生成指定表,其余表不生成、并跳过忽略表配置
            //根据名称指定表生成
            .designatedTableName(getMultiParam(designateSection.get("table")))
            //根据表前缀生成
            .designatedTablePrefix(getMultiParam(designateSection.get("prefix")))
            //根据表后缀生成
            .designatedTableSuffix(getMultiParam(designateSection.get("suffix")))
            //忽略表名
            .ignoreTableName(getMultiParam(section.get("table")))
            //忽略表前缀
            .ignoreTablePrefix(getMultiParam(section.get("prefix")))
            //忽略表后缀
            .ignoreTableSuffix(getMultiParam(section.get("suffix")))
            .build();
    }

    /**
     * 获取一组参数
     * @return cn.smallbun.screw.core.engine.EngineConfig
     * @author Cloud9
     * @createTime 2022/5/26 17:31
     */
    private static List<String> getMultiParam(String paramItem) {
        return null == paramItem ? new ArrayList<>() :
            Arrays.stream(paramItem.split(","))
            .map(String::trim)
            .collect(Collectors.toList());
    }

    /**
     * 全部配置初始化
     * @return cn.smallbun.screw.core.engine.EngineConfig
     * @author Cloud9
     * @createTime 2022/5/26 17:31
     */
    private static Configuration initConfiguration() {
        final Profile.Section section = configFile.get("doc-config");

        return Configuration.builder()
                .title(section.get("title", "测试文档"))
                .organization(section.get("organization", "cloud9"))
                .organizationUrl(section.get("organizationUrl", "https://home.cnblogs.com/u/mindzone/"))
                .version(section.get("version", "1.0.0")) //版本
                .description(section.get("description", "数据库设计文档生成")) //描述
                //数据源
                .dataSource( initDataSource())
                //生成配置
                .engineConfig(initEngineConfig())
                //生成配置
                .produceConfig( initProcessConfig())
                .build();
    }


    public static void main(String[] args) {
        //执行生成
        new DocumentationExecute(initConfiguration()).execute();
    }
}

  

配置文件:

[mysql-config]
driverClassname = com.mysql.cj.jdbc.Driver
jdbcUrl = jdbc:mysql://localhost:3306/ymcd_aisw?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
username = root
password = 123456
useInformationSchema = true
max-pool-size = 5

[template-engine-config]
output-dir = .
file-name = xx系统MySQL设计文档

[designate-config]


[ignore-config]
table = test_user, test_group
prefix = gen_, qrtz_, sys_
suffix = _test

[doc-config]
title = xx系统MySQL设计文档
version = 1.0.0
description = xx系统设计文档生成
organization = Cloud9
organizationUrl = https://home.cnblogs.com/u/mindzone/

 

配置文件存放位置:

 

打包项目:

声明启动类:

 

 

 无主清单,请参考:

https://blog.csdn.net/weixin_49736959/article/details/108969870

 

文件结构:

 

 

 

posted @ 2022-05-26 20:49  emdzz  阅读(135)  评论(0编辑  收藏  举报