0 引言

最新在重新整理老项目的文档,其中数据库说明文档上一版更新还是在1年多前,文档中的数据结构说明与当前数据库严重脱节,所以更新数据库说明文档已经是迫在眉睫的事情了。

因为项目是一个比较大型且“年长‘的项目,涉及了多个数据库,N多张表,所以作为一个好(懒)的开发者,一张表一张表手写是不可能,当然可以通过sql导出表结构,但是依然很慢。

能不能有一个工具,能帮我自动生成数据库说明文档,当然是有的,今天我们就来说一说数据库中的swagger——screw组件

1. screw简介

screw是用来生成数据库表结构说明文档的组件,通过引用jar包,通过简单的配置就可以自动生成文档,相当于数据库中的swagger,支持html, word, md三种格式的文档

2. screw使用

1、创建springboot项目,引入依赖:

  • 因为我们要作为一个springboot web项目运行,所以引入spring web
  • 因为要使用mysql连接驱动器,所以引入mysql-connector-java
  • screw-coreHikariCP是screw组件使用需要的依赖
  • 最后,我们需要用单元测试的方式来调用生成文档的方法,所以需要spring-boot-starter-test依赖
        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- screw核心 --><dependency><groupId>cn.smallbun.screw</groupId><artifactId>screw-core</artifactId><version>1.0.5</version></dependency><!-- HikariCP --><dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>3.4.5</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>

2、application.yml配置文件配置数据库连接信息,同时开启xa.properties.useInformationSchema,该配置用于开启读取表注释(remarks)信息

spring:application:name: datebase_doc_demodatasource:driver-class-name: com.mysql.cj.jdbc.Drivername: defaultDataSourceurl: jdbc:mysql://localhost:3306/bladex?serverTimezone=UTCusername: rootpassword: 123456xa:properties:useInformationSchema: true

3、创建生成文档代码

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;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;@SpringBootTest
class DatebaseDocDemoApplicationTests2 {@Autowiredprivate ApplicationContext applicationContext;@Testvoid generateDBDoc2(){DataSource dataSource = applicationContext.getBean(DataSource.class);EngineConfig engineConfig = EngineConfig.builder()//生成文件路径.fileOutputDir("/Users/wuhanxue/Downloads")// 打开目录.openOutputDir(true)// 文件类型,支持word、md和html.fileType(EngineFileType.HTML)//生成模板实现,支持freemarker和velocity.produceType(EngineTemplateType.freemarker).build();//生成配置文档Configuration configuration = Configuration.builder().version("1.0.0").description("数据库说明文档").dataSource(dataSource).engineConfig(engineConfig).produceConfig(getProcessConfig()).build();//执行生成new DocumentationExecute(configuration).execute();}/*** 配置想要生成的表 + 配置想要忽略的表* @return*/private ProcessConfig getProcessConfig() {// 忽略表名List<String> ignoreTable = Arrays.asList("test_xxx");//忽略表前缀,如忽略a开头的数据库表List<String> ignorePrefix = Arrays.asList("test_");//忽略表后缀List<String> ignoreSuffix = Arrays.asList("_test");return ProcessConfig.builder()// 根据名称生成指定表.designatedTableName(new ArrayList<String>())// 根据表前缀生成.designatedTablePrefix(new ArrayList<String>())// 根据表后缀生成.designatedTableSuffix(new ArrayList<String>())// 忽略表名.ignoreTableName(ignoreTable)// 忽略表前缀.ignoreTablePrefix(ignorePrefix)// 忽略表后缀.ignoreTableSuffix(ignoreSuffix).build();}
}

当然这个是需要springboot项目的配置文件配置的,如果你是spring项目引入的,或者其他纯maven项目引入,也可以通过一下代码生成

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;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import javax.sql.DataSource;
import java.util.ArrayList;@SpringBootTest
class DatebaseDocDemoApplicationTests {@Testvoid generateDBDoc(){HikariConfig hikariConfig = new HikariConfig();hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/bladex?serverTimezone=UTC");hikariConfig.setUsername("root");hikariConfig.setPassword("123456");// 设置可以获取remark信息hikariConfig.addDataSourceProperty("useInformationSchema","true");hikariConfig.setMinimumIdle(2);hikariConfig.setMaximumPoolSize(5);DataSource dataSource = new HikariDataSource(hikariConfig);// 生成配置EngineConfig engineConfig = EngineConfig.builder()// 生成文件路径.fileOutputDir("/Users/wuhanxue/Downloads")// 打开目录 设置为true执行完代码后会自动打开对应路径文件夹.openOutputDir(true)// 文件类型,支持三种类型
//                .fileType(EngineFileType.HTML).fileType(EngineFileType.WORD)// 生成模板实现.produceType(EngineTemplateType.freemarker).build();// 忽略表,这些表不会在文档中生成ArrayList<String> ignoreTableName = new ArrayList<>();ignoreTableName.add("test_xxx");// 忽略表前缀,这些表不会在文档中生成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();}}

4、运行测试

  • html格式

  • word格式

  • md格式

源码

文中源码可在如下地址下载:

git地址

总结

如上所示,我们的数据库说明文档就做完了,当然我在实际项目中的数据库比上述演示的要大的多,但数据库越大,我们省的时间就越多

但是大家也要把握screw组件的适用场景,有的人会觉得它很鸡肋,因为我们实际开发时是先写数据库设计文档,再开发的,但有的场景,比如接手老项目,或者项目迭代比较快的,数据库文档更新不及时时,就可以使用这个组件来帮助我们自动生成文档

这里大家还可以继续做拓展,将生成方法包装为一个接口,通过监控binlog中的DDL语句,来触发接口调用,从而实现自动生成数据库文档,可以通过生成html格式的,放到后台项目中,这样就实现了实时自动更新的数据库说明文档

springboot:接手老项目,领导让更新数据库说明文档,如何3分钟完成任务相关推荐

  1. mysql数据库开发笔记_MySQL数据库生成数据库说明文档

    在半年多前为一个MySQL数据库生成过数据库说明文档,今天要重新生成一份,但是发现完全不记得当时是怎么生成的,只能在网上搜索重来一遍,所以今天特意把这个过程记录一下. 一.安装 使用MySQL数据库表 ...

  2. 织梦数据库支持mysql5.7_最新织梦DEDECMS5.7数据库说明文档

    最新织梦DEDECMS5.7数据库说明文档: dede_arctype 栏目管理表 ID int(10) 栏目编号(自动编号) reID int(10) 父栏目编号 topID int(10) sor ...

  3. flutter创建新项目或者接手老项目配置环境依赖等全流程

    1,下载android studio和flutter sdk(接收别人项目先看第9条,直接去官网下载正确的版本) 2,将android studio代理关闭: 打开as->File->Se ...

  4. 软件开发中接手老项目应该如何快速上手

    Author:3# 一个专注于web技术的80后 核心就是一句话:软件开发要知其然知其所以然. CSDN@3#,CSDN官方首发,`3#原创 博客:

  5. springboot+vue新生宿舍管理系统(源码+说明文档),一款优秀的毕业设计

    风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农.今天要和大家聊的是一款基于springboot的新生宿舍管理系统.项目源码请联系风歌,文末附上联系信息 . 目前有各类成品java毕 ...

  6. springboot+vue在线答疑系统(源码+说明文档)

    风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农.今天要和大家聊的是一款基于springboot的线答疑系统.项目源码请联系风歌,文末附上联系信息 . 目前有各类成品java毕设,需 ...

  7. 编程以外积累: 如何给项目生成类似VS2008的说明文档

    1:[下载] 目前微软提供的官方开源工具 Sandcastle  结果跑到项目中一看,抬头就来了这么一段: The Sandcastle CodePlex project is no longer u ...

  8. 使用PL/SQL Developer给Oracle生成漂亮的数据库说明文档

    工作中因为要使用Oracle数据库,因为表很多,所以希望能将数据库导出到本地进行查看,一直没有找到合适的工具来根据表结构生成对应的文档.今天偶然发现,原来PL/SQL Developer内置了这个插件 ...

  9. 职场中接手了老项目,如何做性能优化?

    作为一名程序员,在工作中大概率都会遇到接手老项目的情况. 跳槽从一个坑跳到另一个坑,接手老项目 同事内部活水了,他手上的项目都交接给你 团队"核心"成员要上新项目or重点项目了,团 ...

最新文章

  1. [BZOJ] 1606: [Usaco2008 Dec]Hay For Sale 购买干草
  2. 关系型数据库和非关系型数据库的优劣对比?
  3. 示例Express中路由规则及获取请求参数
  4. MF RC522读卡芯片手册
  5. .net 深入系统编程(三)
  6. UFLDL教程: Exercise:Learning color features with Sparse Autoencoders
  7. 驱动api_消费者驱动契约已死?
  8. 《iOS 6核心开发手册(第4版)》——2.11节秘诀:构建星星滑块
  9. OKExChain生态项目KSwap完成50万美元种子轮融资
  10. SharePoint 2010之LINQ与SPMetal
  11. 小白重装系统教程_小白重装系统使用教程
  12. centos6.5安装sublime text 2
  13. AngularJS简单例子
  14. SPSS 卡方检验(图文+数据集)【SPSS 019期】
  15. sap销售发货的流程_SAP系统发货运输流程操作手册.pdf
  16. [毕设分享]基于华为eNSP的校园网设计和仿真模拟
  17. gRPC框架学习:5、Java+gRPC+maven+idea实例测试并打jar包
  18. ydui滚动加载:TypeError: Cannot read property '$emit' of undefined
  19. AUTOCAD——文件管理
  20. 半岛铁盒平板测评--真的很垃圾的平板-怎么修改CPU型号

热门文章

  1. 数据库作业6:SQL练习3 - SELECT
  2. sp3 win xp 符号表_windows xp sp3下载|windows xp下载「xp系统」-太平洋下载中心
  3. 【bioinfo】fasta/fastq/sam格式互相转化
  4. 西雅图本地独角兽一览
  5. TEZ的安装以及测试
  6. 延参法师-《80后脱口秀》 -《天天向上》-《宽怀人生》
  7. git reject 报错
  8. 4. java gc
  9. Java学习路线-五大步骤让你入门到精通
  10. 2019腾讯游戏安全技术竞赛移动端题目解析