数据库文档展示工具

Posted sp42a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库文档展示工具相关的知识,希望对你有一定的参考价值。

实用工具:数据库文档展示工具

简介

数据库文档展示工具(database doc),又叫数据库注释浏览工具,是一个简单的数据库展示各个字段注释的开源工具。在日常开发工作中,您有否这样的体验?

  • 想给前端开发或者其他人员浏览数据库结构、表详情等的信息,出于管理的原因,却又不想告诉他们数据库账号、密码;
  • 要生成数据库结构文档或报表,不知有什么好工具。即使生成了,结构变动了,又要再生成一次,——有一个同步的问题
  • 根据表结构快速生成 Java 实体

如果有上述场景,那么数据库文档展示工具就是为您而设的。该工具如下截图所示,

它包含下面的功能。

  • 读取数据库的元数据(Meta data)转化为 html 呈现。
  • 支持多数据源切换。当前仅支持 mysql 数据库
  • 提供一个简单的代码生成器,可快速地将某张表转化为 JavaBean
  • Java Spring 项目,依赖少,方便集成

在线演示地址请点击 https://framework.ajaxjs.com/demo/database-doc/

使用方法

多数据源管理

生成 Java Bean

批量下载 Java Bean,打包整个库的 Bean 文件转换 zip 包下载。

集成方法

提示:该工具使用“前后端分离”架构,如果单纯只为展示数据库文档,那么只提供前端 UI 读取的 JSON 数据即可,不需要后台服务。看阁下需要,当然那 JSON 要符合特定的格式。

当然,更常见的情况是配合我们所提供的服务端程序一起使用——我们接着来看。

添加依赖

该工具不是一个独立运行的工程,而是提供 jar 包集成到你的项目中。故你需依赖下面的 Maven:

<dependency>
	<groupId>com.ajaxjs</groupId>
	<artifactId>ajaxjs-framework</artifactId>
	<version>1.0.6</version>
</dependency>

这个 jar 包通过 Servlet 3.0 打包技术,将前端都集成进去 jar 包里了。

配置 MakeDbDocController

这 MakeDbDocController (这是一个标准的 Spring MVC 控制器)的作用是,生成数据库信息的 JSON,用于显示数据库文档。使用它,您要将其继承于 BaseMakeDbDocController。我们的 API 设计风格即是,类库提供抽象基类,让用户继承它,并提供相关的参数配置。

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.ajaxjs.database_meta.BaseMakeDbDocController;

@RestController
@RequestMapping("/make_database_doc") // 这个接口地址不能自定义了,否则前端要跟着改
public class MakeDbDocController extends BaseMakeDbDocController 


当前这个 MakeDbDocController 非常简单,并没有什么要配置的地方,所以您需要做的就是复制 MakeDbDocController 到你的工程中去。

至于 BaseMakeDbDocController 里面,最主要就是封装了一个 GET 的方法,用于返回配置的 JSON。

这样,启动您的项目,在浏览器访问 前缀/html/database-doc/,例如 http://localhost:8080/oba/html/database-doc/ 即可访问页面。

配置多数据源的支持

如果你希望管理多个数据库的库或数据源,就要涉及 SQL (存储起来)和 Java 后台服务。请接着继续看如何集成(相对会麻烦一些)。

创建数据库

创建数据库,仅需一张表。新建数据源表 adp_datasource 如下:

CREATE TABLE `adp_datasource` (
	`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '主键 id,自增',
	`name` VARCHAR(45) NOT NULL COMMENT '名称' COLLATE 'utf8mb4_unicode_ci',
	`url_dir` VARCHAR(50) NOT NULL COMMENT '数据源编码,唯一' COLLATE 'utf8mb4_unicode_ci',
	`type` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '数据源类型' COLLATE 'utf8mb4_unicode_ci',
	`url` VARCHAR(255) NOT NULL COMMENT '连接地址' COLLATE 'utf8mb4_unicode_ci',
	`username` VARCHAR(255) NULL DEFAULT NULL COMMENT '登录用户' COLLATE 'utf8mb4_unicode_ci',
	`password` VARCHAR(255) NULL DEFAULT NULL COMMENT '登录密码' COLLATE 'utf8mb4_unicode_ci',
	`connect_ok` TINYINT(1) NULL DEFAULT NULL COMMENT '是否连接验证成功',
	`stat` TINYINT(3) NULL DEFAULT NULL COMMENT '数据字典:状态',
	`cross_db` TINYINT(1) NULL DEFAULT NULL COMMENT '是否跨库',
	`uid` BIGINT(19) NULL DEFAULT NULL COMMENT '唯一 id,通过 uuid 生成不重复 id',
	`creator` VARCHAR(50) NULL DEFAULT NULL COMMENT '创建人名称(可冗余的)' COLLATE 'utf8mb4_unicode_ci',
	`creator_id` INT(10) NULL DEFAULT NULL COMMENT '创建人 id',
	`create_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建日期',
	`updater` VARCHAR(50) NULL DEFAULT NULL COMMENT '修改人名称(可冗余的)' COLLATE 'utf8mb4_unicode_ci',
	`updater_id` INT(10) NULL DEFAULT NULL COMMENT '修改人 id',
	`update_date` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改日期',
	PRIMARY KEY (`id`) USING BTREE,
	UNIQUE INDEX `id_UNIQUE` (`id`) USING BTREE
)
COMMENT='数据源'

配置 API

Java API 部分主要是数据源本身的 CRUD 服务。具体来说就是你要复制下面这个 DataSourceController 类到你的项目中,并适当修改配置。数据源的 CRUD 由这个控制器来处理:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.ajaxjs.data_service.controller.BaseDataSourceController;

@RestController
@RequestMapping("/data_service/datasource") // 这个接口地址不能自定义了,否则前端要跟着改
public class DataSourceController extends BaseDataSourceController 
    // 配置表名。注意你的数据连接(一般是连接字符串)如果不指定库名(为了跨库),则要添加上完整的库名
	final static String TABLE_NAME = "aj_base.adp_datasource"; 

	@Override
	protected String getTableName()  
		return TABLE_NAME;
	

    /*
     返回数据库连接。当前的例子从 Spring IOC 返回 DataSource 再得到 Connection,现实中可以按照你的注入方式得到 Connection
    */
	@Override
	protected Connection getConnection()  
		DataSource ds = DiContextUtil.getBean(DataSource.class);

		try 
			return ds.getConnection();
		 catch (SQLException e) 
			return null;
		
	

当前配置有两个,分别对应两个 Java 抽象的方法:一个是配置表名,另外一个是配置数据库的连接。这个数据源是能访问到表 TABLE_NAME = "aj_base.adp_datasource" 的地方。怎么返回数据库的连接?一般 Spring 项目可以通过注入返回标准 DataSource,从而返回 Connection,例如下面的一个例子。

@Bean(value = "dataSource", destroyMethod = "close")
DataSource getDs() 
	return DataSerivceUtils.setupJdbcPool("com.mysql.cj.jdbc.Driver", url, user, psw);

具体配置视乎你实际配置而定。只要返回 Connection 就行。

使用答疑

  • 这个中原理是什么?

很简单,JDBC API 就有强大的数据库元数据获取能力。JDBC MetaData 一种方式是遍历各字段信息。但这种方式通用性不强,依赖于 MySQL,换别的数据库不一定。
另外一种方式就是获取 CREATE DDL(本工具使用的方式),解析这个 DDL 通过开源 SQL 解析工具 com.github.jsqlparser 完成。最后一股脑把所有信息生成 JSON 给 UI。

前端基于 Vue2/iView 搞定,没啥难度,就是把那个大 JSON 渲染 UI 出来。

  • 只支持 Spring Boot 吗?

不是,老系统的 Spring MVC 也行。原生 Servlet 行不行?抱歉,不行哦~

  • 源码在哪里?

前端在 https://gitee.com/sp42_admin/ajaxjs/tree/master/aj-ui-widget/database-doc ,后端其实是 AJ Framework,具体部分在 12

  • 如何打印?

左侧的菜单中,右键鼠标打开新的浏览器创建,这是完成页面,直接打印。

  • 如何导出 PDF?

参考“打印”,选择 PDF 格式打印到文件。

  • 我不想任何人可以访问页面,怎么加用户登录、验证?

本工具不考虑这方面问题。如同上述集成方式,不直接提供 Controller,而是让你去继承它,至于如何配置用户身份识别,悉随尊便,加过滤器、拦截器都行,是你的事~

提示:简单点搞个 HTTP Basic 认证即可,安全性高点就 HTTP Digest。

  • 有否计划其他数据库,如 SQL Server?

很可能不会,精力有限,除非……

同类产品

什么是数据库文档?
其实在工作中进行项目交付的时候经常用到;简单来说数据库文档就是对整个数据库设计说明的文档,比如使用了哪个数据库,每张表的字段,类型说明等,然后整理成一个设计文档,这个文档多种多样,最常见的就是word,有了数据库文档对以后的数据库维护,或者进行二次开发都很方便。

screw

在企业级开发中、我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有、要么有、但都是手写、后期运维开发,需要手动进行维护到文档中,很是繁琐、如果忘记一次维护、就会给以后工作造成很多困扰、无形中制造了很多坑留给自己和后人

https://gitee.com/leshalv/screw
https://cloud.tencent.com/developer/article/1866776

Databasir

https://doc.databasir.com/
https://github.com/vran-dev/databasir
https://blog.cc1234.cc/posts/databasir-beta-experience/
https://blog.cc1234.cc/posts/databasir-show/

DBCHM

C/S 结构,C# 写的 https://gitee.com/dotnetchina/DBCHM

SmartSQL

C/S 结构,C# 写的 https://gitee.com/dotnetchina/SmartSQL

TableGo

C/S 结构 详细介绍地址:https://blog.csdn.net/vipbooks/article/details/78767469 官网地址:http://www.tablego.cn/

以上是关于数据库文档展示工具的主要内容,如果未能解决你的问题,请参考以下文章

下载java开发工具包JDK,冲刺7天拿下Offer!

开源项目:数据库表结构生成文档工具

有没有开源的java的接口文档管理工具

Redis Web管理客户端工具

原型设计工具介绍

追求代码质量: 探究 XMLUnit