数据库文档生成工具-screw (螺丝钉)

目录

screw 数据库表结构文档生成快速入门

Oracle 生成数据库设计文档


screw 数据库表结构文档生成快速入门

1、screw (螺丝钉) 英:[skruː] ~ 简洁好用的数据库表结构文档生成工具

2、详细介绍参考官网:https://gitee.com/leshalv/screw

3、使用非常简单,直接从官网复制源码即可使用。需要注意的是:screw 1.0.5 版本时,cn.smallbun.screw.core.query.AbstractDatabaseQuery.getSchema 中会强转 DataSource 为 HikariDataSource,所以只支持 HikariDataSource 数据源。(Spring boot 默认 HikariCP 作为数据源.)

4、添加 screw  依赖:

        <!--数据库文档生成工具-->
        <!-- https://mvnrepository.com/artifact/cn.smallbun.screw/screw-core -->
        <dependency>
            <groupId>cn.smallbun.screw</groupId>
            <artifactId>screw-core</artifactId>
            <version>1.0.5</version>
        </dependency>

https://gitee.com/wangmx1993/jpa-transactional/blob/master/pom.xml

5、编写测试类或者访问接口生成数据库表文档,如果是需要对远程服务器上的数据库生成文档,则还需要在下面的基础上,将生成的文档文件做一个下载功能。

/** screw (螺丝钉) 英:[skruː] ~ 简洁好用的数据库表结构文档生成工具
 * @author wangMaoXiong
 * @version 1.0
 * @date 2022/5/22 10:35
 */
@RestController
public class DocGeneration {
    /**
     * http://localhost:8080/doc/generation
     * 数据库表结构文档生成工具
     */
    @GetMapping("doc/generation")
    public String documentGeneration() {
        // 获取桌面目录作为文档存放目录, 指定生成的文件名称
        File homeDirectory = FileSystemView.getFileSystemView().getHomeDirectory();
        String fileName = "数据库设计文档";
        // 生成的文件类型:HTML-> .html,WORD-> .doc、MD-> .md
        EngineFileType fileType = EngineFileType.HTML;

        // 数据源也可以从 Spring 容器中获取,或者通过 jdbcTemplate 获取.
        // screw 1.0.5 版本时, cn.smallbun.screw.core.query.AbstractDatabaseQuery.getSchema 中会强转为 HikariDataSource
        // 所以只支持 HikariDataSource 数据源(Spring boot 默认 HikariCP 作为数据源.)
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
        hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=UTC");
        hikariConfig.setUsername("root");
        hikariConfig.setPassword("root");
        // 设置可以获取tables remarks信息
        hikariConfig.addDataSourceProperty("useInformationSchema", "true");
        hikariConfig.setMinimumIdle(2);
        hikariConfig.setMaximumPoolSize(5);
        DataSource dataSource = new HikariDataSource(hikariConfig);

        // 文件生成配置
        EngineConfig engineConfig = EngineConfig.builder()
                // 生成文件存放的目录
                .fileOutputDir(homeDirectory.getAbsolutePath())
                // 生成完成是否打开输出目录
                .openOutputDir(true)
                // 生成文件类型:HTML-> .html,WORD-> .doc、MD-> .md
                .fileType(fileType)
                // 生成模板实现
                .produceType(EngineTemplateType.freemarker)
                // 自定义文件名称
                .fileName(fileName).build();

        // 忽略指定名称的表
        ArrayList<String> ignoreTableName = new ArrayList<>();
        ignoreTableName.add("test_user");
        ignoreTableName.add("test_group");
        // 忽略指定名称前缀的表
        ArrayList<String> ignorePrefix = new ArrayList<>();
        ignorePrefix.add("test_");
        // 忽略指定名称后缀的表
        ArrayList<String> ignoreSuffix = new ArrayList<>();
        ignoreSuffix.add("_test");
        ignoreSuffix.add("_backup");

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

        // Screw 配置入口
        Configuration config = Configuration.builder()
                // 版本
                .version("1.0.0")
                // 描述
                .description("数据库设计文档生成")
                // 数据源(可以自己单独配置,也可以直接从应用中获取)
                .dataSource(dataSource)
                // 文档生成配置
                .engineConfig(engineConfig)
                // 数据处理配置
                .produceConfig(processConfig)
                .build();
        // 执行生成文档
        new DocumentationExecute(config).execute();

        // 文档文件全路径, 如 E:\桌面\数据库设计文档.html
        String fullPath = homeDirectory + File.separator + fileName + fileType.getFileSuffix();
        return fullPath;
    }
}

https://gitee.com/wangmx1993/jpa-transactional/blob/master/src/main/java/com/wmx/controller/DocGeneration.java

Oracle 生成数据库设计文档

1、无论什么数据库,记得先在 pom.xml 文件中引入数据库驱动依赖。

2、个人觉得它对 Oracle 的部分数据类型长度表述并不是很准确。

pom.xml · 汪少棠/jpaTransactional - Gitee.com

    @Test
    public void documentGeneration() {
        // 获取桌面目录作为文档存放目录, 指定生成的文件名称
        File homeDirectory = FileSystemView.getFileSystemView().getHomeDirectory();
        String fileName = "数据库设计文档";
        // 生成的文件类型:HTML-> .html,WORD-> .doc、MD-> .md
        EngineFileType fileType = EngineFileType.HTML;

        // 数据源也可以从 Spring 容器中获取,或者通过 jdbcTemplate 获取.
        // screw 1.0.5 版本时, cn.smallbun.screw.core.query.AbstractDatabaseQuery.getSchema 中会强转为 HikariDataSource
        // 所以只支持 HikariDataSource 数据源(Spring boot 默认 HikariCP 作为数据源.)
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setDriverClassName("oracle.jdbc.driver.OracleDriver");
        hikariConfig.setJdbcUrl("jdbc:oracle:thin:@10.104.65.181:1521/orcl");
        hikariConfig.setUsername("cs_element");
        hikariConfig.setPassword("1");
        // 设置可以获取tables remarks信息
        hikariConfig.addDataSourceProperty("useInformationSchema", "true");
        hikariConfig.setMinimumIdle(2);
        hikariConfig.setMaximumPoolSize(5);
        DataSource dataSource = new HikariDataSource(hikariConfig);

        // 文件生成配置
        EngineConfig engineConfig = EngineConfig.builder()
                // 生成文件存放的目录
                .fileOutputDir(homeDirectory.getAbsolutePath())
                // 生成完成是否打开输出目录
                .openOutputDir(true)
                // 生成文件类型:HTML-> .html,WORD-> .doc、MD-> .md
                .fileType(fileType)
                // 生成模板实现
                .produceType(EngineTemplateType.freemarker)
                // 自定义文件名称
                .fileName(fileName).build();

        // 忽略指定名称的表
        ArrayList<String> ignoreTableName = new ArrayList<>();
        ignoreTableName.add("test_user");
        ignoreTableName.add("test_group");
        // 忽略指定名称前缀的表
        ArrayList<String> ignorePrefix = new ArrayList<>();
        ignorePrefix.add("test_");
        // 忽略指定名称后缀的表
        ArrayList<String> ignoreSuffix = new ArrayList<>();
        ignoreSuffix.add("_test");
        ignoreSuffix.add("_backup");

        List<String> exportTables = getExportTables();

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

        // Screw 配置入口
        Configuration config = Configuration.builder()
                // 版本
                .version("1.0.0")
                // 描述
                .description("数据库设计文档生成")
                // 数据源(可以自己单独配置,也可以直接从应用中获取)
                .dataSource(dataSource)
                // 文档生成配置
                .engineConfig(engineConfig)
                // 数据处理配置
                .produceConfig(processConfig)
                .build();
        // 执行生成文档
        new DocumentationExecute(config).execute();

        // 文档文件全路径, 如 E:\桌面\数据库设计文档.html
        String fullPath = homeDirectory + File.separator + fileName + fileType.getFileSuffix();
        System.out.println("生成文档:" + fullPath);
    }

    /**
     * 获取需要导出的表名信息
     *
     * @return
     */
    private List<String> getExportTables() {
        String classPath = "doc/基础库数据库设计验收文档表名合集.txt";
        InputStream inputStream = DocGeneration.class.getClassLoader().getResourceAsStream(classPath);
        List<String> tabNames = new ArrayList<>();
        tabNames = IoUtil.readUtf8Lines(inputStream, tabNames);
        if (ObjectUtil.isEmpty(tabNames)) {
            System.err.println("目标文件中没有表名信息,请检查:" + classPath);
            return new ArrayList<>();
        }
        // 过滤空行、去掉前后空格、去重
        tabNames = tabNames.stream().filter(item -> StrUtil.isNotBlank(item)).map(item -> StrUtil.trim(item)).distinct().collect(Collectors.toList());
        // 排序
        Collections.sort(tabNames);
        return tabNames;
    }

src/test/java/com/wmx/DocGeneration.java · 汪少棠/jpaTransactional - Gitee.com

src/test/resources/doc/基础库数据库设计验收文档表名合集.txt · 汪少棠/jpaTransactional - Gitee.com

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蚩尤后裔-汪茂雄

芝兰生于深林,不以无人而不芳。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值