简介
在企业级开发中、我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有、要么有、但都是手写、后期运维开发,需要手动进行维护到文档中,很是繁琐、如果忘记一次维护、就会给以后工作造成很多困扰、无形中制造了很多坑留给自己和后人,于是需要一个插件工具screw[1]来维护。
screw 特点
- 简洁、轻量、设计良好。不需要 powerdesigner 这种重量的建模工具
- 多数据库支持 。支持市面常见的数据库类型 MySQL、Oracle、SqlServer
- 多种格式文档。支持 MD、HTML、WORD 格式
- 灵活扩展。支持用户自定义模板和展示样式
支持数据库类型
- [✔️] MySQL
- [✔️] MariaDB
- [✔️] TIDB
- [✔️] Oracle
- [✔️] SqlServer
- [✔️] PostgreSQL
- [✔️] Cache DB
依赖
这里以 mysql8 数据库为例子
- <!--数据库文档核心依赖-->
- <dependency>
- <groupId>cn.smallbun.screw</groupId>
- <artifactId>screw-core</artifactId>
- <version>1.0.2</version>
- </dependency>
- <!-- 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>
1. 通过自定义代码配置文档生成
- @Test
- public void shouldAnswerWithTrue() {
- //数据源
- HikariConfig hikariConfig = new HikariConfig();
- hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
- hikariConfig.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/test");
- 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("/Users/lengleng")
- //打开目录
- .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();
- }
2. 通过插件的形式生成文档
- <build>
- <plugins>
- <plugin>
- <groupId>cn.smallbun.screw</groupId>
- <artifactId>screw-maven-plugin</artifactId>
- <version>1.0.2</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>root</password>
- <!--driver-->
- <driverClassName>com.mysql.cj.jdbc.Driver</driverClassName>
- <!--jdbc url-->
- <jdbcUrl>jdbc:mysql://127.0.0.1:3306/test</jdbcUrl>
- <!--生成文件类型-->
- <fileType>HTML</fileType>
- <!--文件输出目录-->
- <fileOutputDir>/Users/lengleng</fileOutputDir>
- <!--打开文件输出目录-->
- <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>