在企业级开发中、我们经常会有编写数据库表结构文档的时间付出,如果数据库表结构更新了还得手动更新维护到文档中,很是繁琐。
无意之间发现了github上面有个人写了一个小工具专门来做这个事情,名字叫screw(螺丝刀),用了下很不错。这里特意记录一下。
工具的github地址:https://github.com/pingfangushi/screw
特点
- 简洁、轻量、设计良好
- 多数据库支持,目前已支持MySQL、MariaDB、TIDB、Oracle、SqlServer、PostgreSQL、Cache DB
- 多种格式文档,目前已至此HTML、Word、MarkDown格式
- 灵活扩展
- 支持自定义模板
使用
有两种使用方式,一种是通过maven插件引入后执行命令生成,一种是直接写代码来生成文档。
下面我通过MySQL数据库的使用例子来说明。
引入依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <dependencies> <dependency> <groupId>cn.smallbun.screw</groupId> <artifactId>screw-core</artifactId> <version>1.0.5</version> </dependency> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.20</version> <scope>runtime</scope> </dependency> </dependencies>
|
代码方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| public class BuildDatabaseDoc {
public static void main(String[] args) { HikariConfig hikariConfig = new HikariConfig(); hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver"); hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/oauth2?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC"); hikariConfig.setUsername("user"); hikariConfig.setPassword("password"); 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) .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"); ProcessConfig processConfig = ProcessConfig.builder() .designatedTableName(new ArrayList<>()) .designatedTablePrefix(new ArrayList<>()) .designatedTableSuffix(new ArrayList<>()) .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插件方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| <build> <plugins> <plugin> <groupId>cn.smallbun.screw</groupId> <artifactId>screw-maven-plugin</artifactId> <version>${lastVersion}</version> <dependencies> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.20</version> </dependency> </dependencies> <configuration> <username>root</username> <password>password</password> <driverClassName>com.mysql.cj.jdbc.Driver</driverClassName> <jdbcUrl>jdbc:mysql://127.0.0.1:3306/xxxx</jdbcUrl> <fileType>HTML</fileType> <openOutputDir>false</openOutputDir> <produceType>freemarker</produceType> <fileName>测试文档名称</fileName> <description>数据库文档生成</description> <version>${project.version}</version> <title>数据库文档</title> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
|
配置完以后在 maven project
-> screw
-> screw:run
双击执行ok。
效果图