实用!一键生成数据库文档的神器,支持MySQL/SqlServer/Oracle多种数据库

1,969 阅读3分钟

Screw(螺丝钉)确实是一款简洁好用的数据库表结构文档生成工具,它主要解决了以下几个方面的需求:

  1. 文档自动化生成

    • Screw 可以自动从数据库中获取表结构信息,并生成相应的文档,减少了手动编写文档的工作量。
  2. 多格式输出

    • 支持生成 Markdown、Word 和 HTML 等不同格式的文档,满足不同场景下的使用需求。 例如: html格式

image.png

  1. 多数据库支持

    • 支持多种数据库系统,如 MySQL、MariaDB、TiDB、Oracle、SQL Server、PostgreSQL、Cache DB 等,使得用户不必担心数据库类型的兼容性问题。
  2. 简洁轻量的设计

    • Screw 的设计注重简洁性和轻量化,使得工具易于使用且资源消耗低。
  3. 灵活的扩展性

    • 用户可以根据需要自定义模板,这意味着可以调整文档的样式和布局以符合个人或团队的需求。
  4. Maven 插件与 Spring Boot 集成

    • 提供 Maven 插件支持,方便在构建过程中自动生成文档。
    • 支持 Spring Boot 应用程序的集成,使得开发者能够轻松地在项目中使用 Screw 生成文档。
  5. 代码生成

    • 除了文档生成之外,某些版本还支持基于数据库表结构生成代码模板,帮助开发者快速搭建应用程序。

如何生成数据库文档

方法一:可以使用Maven插件运行也可以编写Java类代码运行

首先导入如下依赖

<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>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>

1.Maven插件运行

点击maven--》plugins--》screw --》run

<plugin>
    <groupId>cn.smallbun.screw</groupId>
    <artifactId>screw-maven-plugin</artifactId>
    <version>1.0.5</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:3307/hotel?serverTimezone=UTC</jdbcUrl>
<!--生成文件类型 -->
<fileType>WORD</fileType>
<!--打开文件输出目录 -->
<openOutputDir>true</openOutputDir>
<!--生成模板 -->
<produceType>freemarker</produceType>
<!--文档名称 为空时:将采用[数据库名称-描述-版本号]作为文档名称 -->
<fileName>酒店管理系统数据库设计文档V2.0</fileName>
<!--描述 -->
<description>数据库文档生成</description>
<!--版本 -->
<version>${project.version}</version>
<!--标题 -->
<title>数据库文档</title>
</configuration>
</plugin>

方法二:编写Java类RunDoc运行生成数据库文档

package com.creatorblue;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import javax.sql.DataSource;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

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;

/**
 * 运行此程序生成数据库相应文档
 * 
 * @author gavin
 *
 */
public class RunDoc {
	/**
	 * 文档生成
	 * @throws IOException 
	 */
	void documentGeneration() throws IOException {
		// 数据源
		HikariConfig hikariConfig = new HikariConfig();
		hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
		hikariConfig.setJdbcUrl("jdbc:mysql://127.0.0.1:3307/hotel?characterEncoding=UTF-8");
		hikariConfig.setUsername("root");
		hikariConfig.setPassword("root");
		// 设置可以获取tables remarks信息
		hikariConfig.addDataSourceProperty("useInformationSchema", "true");
		hikariConfig.setMinimumIdle(2);
		hikariConfig.setMaximumPoolSize(5);
		DataSource dataSource = new HikariDataSource(hikariConfig);
		// 生成文件路径
		File directory = new File("");//参数为空 
		String fileOutputDir = directory.getCanonicalPath()+"/doc"; 
	   // 生成配置
		EngineConfig engineConfig = EngineConfig.builder()
				// 生成文件路径
				.fileOutputDir(fileOutputDir)
				// 打开目录
				.openOutputDir(true)
				// 文件类型为HMTL
				.fileType(EngineFileType.HTML)
				// 文件类型为DOC
				// .fileType(EngineFileType.DOC)
				// 生成模板实现
				.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();
	}

	public static void main(String[] args) throws IOException {

		RunDoc doc = new RunDoc();
		doc.documentGeneration();
	}

}