数据库文档展示工具

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 要符合特定的格式。

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

添加依赖

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

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

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

创建数据库

创建数据库,仅需一张表。新建数据源表 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 服务,和切换数据源产生文档 JSON 这么两个部分。我们的 API 设计风格即是,类库提供抽象基类,让用户继承它,并提供相关的参数配置。
具体来说就是你要复制下面两个类到你的项目中,并适当修改配置。第一个是DataSourceController,数据源的 CRUD 由这个控制器来处理(这是一个标准的 Spring MVC 控制器):

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 抽象的方法:一个是配置表名,另外一个是配置数据库的连接。

配置 MakeDbDocController

生成数据库信息的 JSON,用于显示数据库文档。

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 


使用答疑

  • 这个中原理是什么?

很简单,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?

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

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

哪位高手可以推荐几款通用的数据库管理工具

在 React 应用中展示报表数据

java操作csv文档通用工具类

译让React组件如文档般展示的6大工具

通用应用广告系列定义关键字以展示广告

后端返回的是个文档,前端如何展示该地址的内容