实用工具:数据库文档展示工具
简介
数据库文档展示工具(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.ajaxjsgroupId>
<artifactId>ajaxjs-frameworkartifactId>
<version>1.0.5version>
dependency>
这个 jar 包通过 Servlet 3.0 打包技术&#xff0c;将前端都集成进去 jar 包里了。
创建数据库
创建数据库&#xff0c;仅需一张表。新建数据源表 adp_datasource
如下&#xff1a;
CREATE TABLE &#96;adp_datasource&#96; (
&#96;id&#96; INT(10) NOT NULL AUTO_INCREMENT COMMENT &#39;主键 id&#xff0c;自增&#39;,
&#96;name&#96; VARCHAR(45) NOT NULL COMMENT &#39;名称&#39; COLLATE &#39;utf8mb4_unicode_ci&#39;,
&#96;url_dir&#96; VARCHAR(50) NOT NULL COMMENT &#39;数据源编码&#xff0c;唯一&#39; COLLATE &#39;utf8mb4_unicode_ci&#39;,
&#96;type&#96; VARCHAR(50) NOT NULL DEFAULT &#39;&#39; COMMENT &#39;数据源类型&#39; COLLATE &#39;utf8mb4_unicode_ci&#39;,
&#96;url&#96; VARCHAR(255) NOT NULL COMMENT &#39;连接地址&#39; COLLATE &#39;utf8mb4_unicode_ci&#39;,
&#96;username&#96; VARCHAR(255) NULL DEFAULT NULL COMMENT &#39;登录用户&#39; COLLATE &#39;utf8mb4_unicode_ci&#39;,
&#96;password&#96; VARCHAR(255) NULL DEFAULT NULL COMMENT &#39;登录密码&#39; COLLATE &#39;utf8mb4_unicode_ci&#39;,
&#96;connect_ok&#96; TINYINT(1) NULL DEFAULT NULL COMMENT &#39;是否连接验证成功&#39;,
&#96;stat&#96; TINYINT(3) NULL DEFAULT NULL COMMENT &#39;数据字典&#xff1a;状态&#39;,
&#96;cross_db&#96; TINYINT(1) NULL DEFAULT NULL COMMENT &#39;是否跨库&#39;,
&#96;uid&#96; BIGINT(19) NULL DEFAULT NULL COMMENT &#39;唯一 id&#xff0c;通过 uuid 生成不重复 id&#39;,
&#96;creator&#96; VARCHAR(50) NULL DEFAULT NULL COMMENT &#39;创建人名称&#xff08;可冗余的&#xff09;&#39; COLLATE &#39;utf8mb4_unicode_ci&#39;,
&#96;creator_id&#96; INT(10) NULL DEFAULT NULL COMMENT &#39;创建人 id&#39;,
&#96;create_date&#96; DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT &#39;创建日期&#39;,
&#96;updater&#96; VARCHAR(50) NULL DEFAULT NULL COMMENT &#39;修改人名称&#xff08;可冗余的&#xff09;&#39; COLLATE &#39;utf8mb4_unicode_ci&#39;,
&#96;updater_id&#96; INT(10) NULL DEFAULT NULL COMMENT &#39;修改人 id&#39;,
&#96;update_date&#96; DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT &#39;修改日期&#39;,
PRIMARY KEY (&#96;id&#96;) USING BTREE,
UNIQUE INDEX &#96;id_UNIQUE&#96; (&#96;id&#96;) USING BTREE
)
COMMENT&#61;&#39;数据源&#39;
配置 API
Java API 部分&#xff0c;主要分为数据源本身的 CRUD 服务&#xff0c;和切换数据源产生文档 JSON 这么两个部分。我们的 API 设计风格即是&#xff0c;类库提供抽象基类&#xff0c;让用户继承它&#xff0c;并提供相关的参数配置。
具体来说就是你要复制下面两个类到你的项目中&#xff0c;并适当修改配置。第一个是DataSourceController
&#xff0c;数据源的 CRUD 由这个控制器来处理&#xff08;这是一个标准的 Spring MVC 控制器&#xff09;&#xff1a;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ajaxjs.data_service.controller.BaseDataSourceController;
&#64;RestController
&#64;RequestMapping("/data_service/datasource")
public class DataSourceController extends BaseDataSourceController {
final static String TABLE_NAME &#61; "aj_base.adp_datasource";
&#64;Override
protected String getTableName() {
return TABLE_NAME;
}
&#64;Override
protected Connection getConnection() {
DataSource ds &#61; DiContextUtil.getBean(DataSource.class);
try {
return ds.getConnection();
} catch (SQLException e) {
return null;
}
}
}
当前配置有两个,分别对应两个 Java 抽象的方法&#xff1a;一个是配置表名&#xff0c;另外一个是配置数据库的连接。
配置 MakeDbDocController
生成数据库信息的 JSON&#xff0c;用于显示数据库文档。
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ajaxjs.database_meta.BaseMakeDbDocController;
&#64;RestController
&#64;RequestMapping("/make_database_doc")
public class MakeDbDocController extends BaseMakeDbDocController {
}
使用答疑
很简单&#xff0c;JDBC API 就有强大的数据库元数据获取能力。JDBC MetaData 一种方式是遍历各字段信息。但这种方式通用性不强&#xff0c;依赖于 MySQL&#xff0c;换别的数据库不一定。
另外一种方式就是获取 CREATE DDL&#xff08;本工具使用的方式&#xff09;&#xff0c;解析这个 DDL 通过开源 SQL 解析工具 com.github.jsqlparser
完成。最后一股脑把所有信息生成 JSON 给 UI。
前端基于 Vue2/iView 搞定&#xff0c;没啥难度&#xff0c;就是把那个大 JSON 渲染 UI 出来。
- 只支持 Spring Boot 吗&#xff1f;
不是&#xff0c;老系统的 Spring MVC 也行。原生 Servlet 行不行&#xff1f;抱歉&#xff0c;不行哦~
前端在 https://gitee.com/sp42_admin/ajaxjs/tree/master/aj-ui-widget/database-doc &#xff0c;后端其实是 AJ Framework&#xff0c;具体部分在 1、2。
左侧的菜单中&#xff0c;右键鼠标打开新的浏览器创建&#xff0c;这是完成页面&#xff0c;直接打印。
参考“打印”&#xff0c;选择 PDF 格式打印到文件。
- 我不想任何人可以访问页面&#xff0c;怎么加用户登录、验证&#xff1f;
本工具不考虑这方面问题。如同上述集成方式&#xff0c;不直接提供 Controller&#xff0c;而是让你去继承它&#xff0c;至于如何配置用户身份识别&#xff0c;悉随尊便&#xff0c;加过滤器、拦截器都行&#xff0c;是你的事~
提示&#xff1a;简单点搞个 HTTP Basic 认证即可&#xff0c;安全性高点就 HTTP Digest。
- 有否计划其他数据库&#xff0c;如 SQL Server?
很可能不会&#xff0c;精力有限&#xff0c;除非……