screw

数据库表结构文档生成工具
授权协议 LGPL
开发语言 Java
所属分类 开发工具、 程序文档工具
软件类型 开源软件
地区 国产
投 递 者 彭华皓
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

在企业级开发中、我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有、要么有、但都是手写、后期运维开发,需要手动进行维护到文档中,很是繁琐、如果忘记一次维护、就会给以后工作造成很多困扰、无形中制造了很多坑留给自己和后人,于是萌生了要自己写一个插件工具的想法,但由于自己前期在程序设计上没有很多造诣,且能力偏低,有想法并不能很好实现,随着工作阅历的增加,和知识的不断储备,终于在2020年的3月中旬开始进行编写,4月上旬完成初版,想完善差不多在开源,但由于工作太忙,业余时间不足,没有在进行完善,到了6月份由于工作原因、频繁设计和更改数据库、经常使用自己写的此插件、节省了很多时间,解决了很多问题 ,在仅有且不多的业余时间中、进行开源准备,于2020年6月22日,开源,欢迎大家使用、建议、并贡献。 

关于名字,想一个太难了,好在我这个聪明的小脑瓜灵感一现,怎么突出它的小,但重要呢?从小就学过雷锋的螺丝钉精神,摘自雷锋日记:虽然是细小的螺丝钉,是个细微的小齿轮,然而如果缺了它,那整个的机器就无法运转了,慢说是缺了它,即使是一枚小螺丝钉没拧紧,一个小齿轮略有破损,也要使机器的运转发生故障的...,感觉自己写的这个工具,很有这意味,虽然很小、但是开发中缺了它还不行,于是便起名为 screw(螺丝钉)。

特点

  • 简洁、轻量、设计良好
  • 多数据库支持
  • 多种格式文档
  • 灵活扩展
  • 支持自定义模板

数据库支持

  • MySQL

  • MariaDB

  • TIDB

  • Oracle

  • SqlServer

  • PostgreSQL

  • Phoenix HBase

  • CacheDB

  • H2

  • DB2

  • HSQL

  • SQLLte

  • 瀚高

  • 达梦

  • 虚谷

  • 人大金仓

文档生成支持

  • html

  • word

  • markdown

使用方式

普通方式

  • 引入依赖

    <dependency>
        <groupId>cn.smallbun.screw</groupId>
        <artifactId>screw-core</artifactId>
        <version>${lastVersion}</version>
    </dependency>
    
  • 编写代码

/**
 * 文档生成
 */
void documentGeneration() {
   //数据源
   HikariConfig hikariConfig = new HikariConfig();
   hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
   hikariConfig.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/database");
   hikariConfig.setUsername("root");
   hikariConfig.setPassword("password");
   //设置可以获取tables remarks信息
   hikariConfig.addDataSourceProperty("useInformationSchema", "true");
   hikariConfig.setMinimumIdle(2);
   hikariConfig.setMaximumPoolSize(5);
   DataSource dataSource = new HikariDataSource(hikariConfig);
   //生成配置
   EngineConfig engineConfig = EngineConfig.builder()
         //生成文件路径
         .fileOutputDir(fileOutputDir)
         //打开目录
         .openOutputDir(true)
         //文件类型
         .fileType(EngineFileType.HTML)
         //生成模板实现
         .produceType(EngineTemplateType.freemarker).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");
   ProcessConfig processConfig = ProcessConfig.builder()
         //忽略表名
         .ignoreTableName(ignoreTableName)
         //忽略表前缀
         .ignoreTablePrefix(ignorePrefix)
         //忽略表后缀
         .ignoreTableSuffix(ignoreSuffix).build();
   //配置
   Configuration config = Configuration.builder()
         //版本
         .version("1.0.0")
         //描述
         .description("数据库设计文档生成")
         //数据源
         .dataSource(dataSource)
         //生成配置
         .engineConfig(engineConfig)
         //生成配置
         .produceConfig(processConfig).build();
   //执行生成
   new DocumentationExecute(config).execute();
}

Maven 插件

<build>
    <plugins>
        <plugin>
            <groupId>cn.smallbun.screw</groupId>
            <artifactId>screw-maven-plugin</artifactId>
            <version>${lastVersion}</version>
            <dependencies>
                <!-- HikariCP -->
                <dependency>
                    <groupId>com.zaxxer</groupId>
                    <artifactId>HikariCP</artifactId>
                    <version>3.4.5</version>
                </dependency>
                <!--mysql driver-->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.20</version>
                </dependency>
            </dependencies>
            <configuration>
                <!--username-->
                <username>root</username>
                <!--password-->
                <password>password</password>
                <!--driver-->
                <driverClassName>com.mysql.cj.jdbc.Driver</driverClassName>
                <!--jdbc url-->
                <jdbcUrl>jdbc:mysql://127.0.0.1:3306/xxxx</jdbcUrl>
                <!--生成文件类型-->
                <fileType>HTML</fileType>
                <!--打开文件输出目录-->
                <openOutputDir>false</openOutputDir>
                <!--生成模板-->
                <produceType>freemarker</produceType>
                <!--描述-->
                <description>数据库文档生成</description>
                <!--版本-->
                <version>${project.version}</version>
                <!--标题-->
                <title>数据库文档</title>
            </configuration>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

参与贡献

恳请的希望有兴趣的同学能够参与到screw建设中来,让我们共同完善它,让我们共同成长,帮助更多开发者,解决更多的问题。

项目版权

license

  • 解决screw Maven插件方式运行时,在编译打包时跳过执行的问题 问题描述 在引入screw 进行数据库文档生成,并且使用Maven插件方式运行时,在执行项目打包时,会自动运行该插件。导致在不需要重新生成数据库文档时,也会去生成数据库文档。并且通常数据库文档生成是基于开发环境的数据库的,对于非开发环境的自动打包处理环境,往往是无法访问开发环境数据库,这也会导致项目的打包出错的问题。出错信息如下

  • Screw 最近写论文,发现一个简洁好用的数据库表结构文档生成器,可以根据数据库快速生成文档。 官方地址:https://github.com/pingfangushi/screw 官方演示视频:https://www.bilibili.com/video/BV1F5411e7J8?spm_id_from=333.880.my_history.page.click 官方给的演示视频是针对MySQL

  • 1、Screw + Oracle11g 数据库文档生成版本说明: 1.1、 运行环境 Java = JDK8 Oracle = Oracle 11g 1.2、pom.xml 依赖 <!-- 数据库文档自动生成 --> <dependency> <groupId>cn.smallbun.screw</groupId> <artifactId>screw-core</artifact

 相关资料
  • PHPSSO 数据库结构[更新日期:2010-12-28] 点击查看 PHPCMS 数据库结构[更新日期:2010-12-28] 点击查看

  • 我在Spring Boot中有一个带有Spring Data Rest的应用程序,我正在尝试使用Swagger maven插件生成带有Swagger的文档。生成控制器文档时没有问题,但存储库没有问题。 我已经在pom中配置了如下形式的swagger maven插件。xml: 我的随身携带物品: 是否可以用swagger-maven-plugin生成存储库留档?

  • 如果需要在程序中 Dump 数据库的结构和数据可以调用 engine.DumpAll(w io.Writer) 和 engine.DumpAllToFile(fpath string)。 DumpAll 方法接收一个io.Writer接口来保存Dump出的数据库结构和数据的SQL语句,这个方法导出的SQL语句并不能通用。只针对当前engine所对应的数据库支持的SQL。 Import 执行数据库S

  • 我有一个包含3个表的数据库:品牌(想想麦当劳)->商店->销售 每个店铺都有很多销售,每个品牌都有很多店铺。如果我想查询麦当劳有多少销售额来建立一个报告,我该如何构造我的品牌文档?我是在brands文档中保留一个字段(每当每个商店销售时就会更新该字段),还是在商店文档中保留一个字段,然后循环遍历所有商店,为每个品牌创建一个销售额总和。 第一种方法可能在读操作上表现得更好,而第二种方法在写操作上表现

  • 1. 类型定义 listSize(属性) 列表的元素个数 pos( 属性) 列表的当前位置 length( 属性) 返回列表中元素的个数 clear( 方法) 清空列表中的所有元素 toString( 方法) 返回列表的字符串形式 getElement( 方法) 返回当前位置的元素

  • list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个 序列 的项目。假想你有一个购物列表,上面记载着你要买的东西,你就容易理解列表了。只不过在你的购物表上,可能每样东西都独自占有一行,而在Python中,你在每个项目之间用逗号分割。 列表中的项目应该包括在方括号中,这样Python就知道你是在指明一个列表。一旦你创建了一个列表,你可以添加、删除或是搜索列表中的项目。由于你可以增加或删

  • 本文向大家介绍详解 linux mysqldump 导出数据库、数据、表结构,包括了详解 linux mysqldump 导出数据库、数据、表结构的使用技巧和注意事项,需要的朋友参考一下 详解 linux mysqldump 导出数据库、数据、表结构 导出完整的数据库备份: 说明:--add-locks:导出过程中锁定表,完成后回解锁。-q:不缓冲查询,直接导出至标准输出  导出完整的数据库表结构

  • 问题内容: 我有一个专栏 组 。 群组 具有存储在group_types中的不同类型(买方,卖方,裁判)。只有当该组是买方类型时,它才具有另一种(更专门)的类型,例如电气和机械类型。 我对如何将其存储在数据库中感到有些困惑。 有人可以建议我一个数据库结构吗? 谢谢 问题答案: 将您的存储为层次结构表(带有或模型): : 将选择中的所有买家。 : 将选择任何数据库中的所有买家。 如果您不需要层次结构