热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

推荐一个数据库文档生成神器

点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达gitee地址:https:gitee.comleshalvscrewGitee

点击上方蓝色字体,选择“标星公众号”

优质文章,第一时间送达

gitee地址:https://gitee.com/leshalv/screw

Gitee项目地址,可以直接去开源项目查看(推荐)

简介

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

于是萌生了要自己写一个插件工具的想法,但由于自己前期在程序设计上没有很多造诣,且能力偏低,有想法并不能很好实现,随着工作阅历的增加,和知识的不断储备,终于在2020年的3月中旬开始进行编写。

4月上旬完成初版,想完善差不多在开源,但由于工作太忙,业余时间不足,没有在进行完善,到了6月份由于工作原因、频繁设计和更改数据库、经常使用自己写的此插件、节省了很多时间,解决了很多问题 ,在仅有且不多的业余时间中、进行开源准备,于2020年6月22日,开源,欢迎大家使用、建议、并贡献。

关于名字,想一个太难了,好在我这个聪明的小脑瓜灵感一现,怎么突出它的小,但重要呢?从小就学过雷锋的螺丝钉精神,摘自雷锋日记:虽然是细小的螺丝钉,是个细微的小齿轮,然而如果缺了它,那整个的机器就无法运转了,慢说是缺了它,即使是一枚小螺丝钉没拧紧,一个小齿轮略有破损,也要使机器的运转发生故障的...,感觉自己写的这个工具,很有这意味,虽然很小、但是开发中缺了它还不行,于是便起名为screw(螺丝钉)。

特点

  • 简洁、轻量、设计良好

  • 多数据库支持

  • 多种格式文档

  • 灵活扩展

  • 支持自定义模板

数据库支持

  • MySQL

  • MariaDB

  • TIDB

  • Oracle

  • SqlServer

  • PostgreSQL

  • Cache DB(2016)

  • H2 (开发中)

  • DB2  (开发中)

  • HSQL  (开发中)

  • SQLite(开发中)

  • 瀚高(开发中)

  • 达梦 (开发中)

  • 虚谷  (开发中)

  • 人大金仓(开发中)

文档生成支持

  • html

  • word

  • markdown

文档截图

  • html

  • word

  • markdwon

使用方式

普通方式

  • 引入依赖

cn.smallbun.screwscrew-core${lastVersion}

  • 编写代码

/*** 文档生成*/
void documentGeneration() {//数据源HikariConfig hikariConfig &#61; new HikariConfig();hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");hikariConfig.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/database");hikariConfig.setUsername("root");hikariConfig.setPassword("password");//设置可以获取tables remarks信息hikariConfig.addDataSourceProperty("useInformationSchema", "true");hikariConfig.setMinimumIdle(2);hikariConfig.setMaximumPoolSize(5);DataSource dataSource &#61; new HikariDataSource(hikariConfig);//生成配置EngineConfig engineConfig &#61; EngineConfig.builder()//生成文件路径.fileOutputDir(fileOutputDir)//打开目录.openOutputDir(true)//文件类型.fileType(EngineFileType.HTML)//生成模板实现.produceType(EngineTemplateType.freemarker)//自定义文件名称.fileName("自定义文件名称").build();//忽略表ArrayList ignoreTableName &#61; new ArrayList<>();ignoreTableName.add("test_user");ignoreTableName.add("test_group");//忽略表前缀ArrayList ignorePrefix &#61; new ArrayList<>();ignorePrefix.add("test_");//忽略表后缀    ArrayList ignoreSuffix &#61; new ArrayList<>();ignoreSuffix.add("_test");ProcessConfig processConfig &#61; ProcessConfig.builder()//指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时&#xff0c;将生成指定表&#xff0c;其余表不生成、并跳过忽略表配置 //根据名称指定表生成.designatedTableName(new ArrayList<>())//根据表前缀生成.designatedTablePrefix(new ArrayList<>())//根据表后缀生成 .designatedTableSuffix(new ArrayList<>())//忽略表名.ignoreTableName(ignoreTableName)//忽略表前缀.ignoreTablePrefix(ignorePrefix)//忽略表后缀.ignoreTableSuffix(ignoreSuffix).build();//配置Configuration config &#61; Configuration.builder()//版本.version("1.0.0")//描述.description("数据库设计文档生成")//数据源.dataSource(dataSource)//生成配置.engineConfig(engineConfig)//生成配置.produceConfig(processConfig).build();//执行生成new DocumentationExecute(config).execute();
}

Maven 插件

cn.smallbun.screwscrew-maven-plugin${lastVersion}com.zaxxerHikariCP3.4.5mysqlmysql-connector-java8.0.20rootpasswordcom.mysql.cj.jdbc.Driverjdbc:mysql://127.0.0.1:3306/xxxxHTMLfalsefreemarker测试文档名称数据库文档生成${project.version}compilerun

扩展模块

pojo生成功能

功能简介

pojo生成功能是基于screw延伸出的扩展模块,目前处于初步开发的状态。在日常的开发中,经过需求分析、建模之后,往往会先在数据库中建表,其次在进行代码的开发。那么pojo生成功能在这个阶段就可以帮助大家节省一些重复劳动了。

使用pojo生成功能可以直接根据数据库生成对应的java pojo对象。这样后续的修改&#xff0c;开发都会很方便。

数据库支持

  • MySQL

使用方式

  • 引入依赖

cn.smallbun.screwscrew-extension${lastVersion}

  • 编写代码

/*** pojo生成*/
void pojoGeneration() {//数据源HikariConfig hikariConfig &#61; new HikariConfig();hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");hikariConfig.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/screw");hikariConfig.setUsername("screw");hikariConfig.setPassword("screw");//设置可以获取tables remarks信息hikariConfig.addDataSourceProperty("useInformationSchema", "true");hikariConfig.setMinimumIdle(2);hikariConfig.setMaximumPoolSize(5);DataSource dataSource &#61; new HikariDataSource(hikariConfig);ProcessConfig processConfig &#61; ProcessConfig.builder()//指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时&#xff0c;将生成指定表&#xff0c;其余表不生成、并跳过忽略表配置//根据名称指定表生成.designatedTableName(new ArrayList<>())//根据表前缀生成.designatedTablePrefix(new ArrayList<>())//根据表后缀生成.designatedTableSuffix(new ArrayList<>()).build();//设置生成pojo相关配置PojoConfiguration config &#61; new PojoConfiguration();//设置文件存放路径config.setPath("/cn/smallbun/screw/");//设置包名config.setPackageName("cn.smallbun.screw");//设置是否使用lombokconfig.setUseLombok(false);//设置数据源config.setDataSource(dataSource);//设置命名策略config.setNameStrategy(new HumpNameStrategy());//设置表过滤逻辑config.setProcessConfig(processConfig);//执行生成new PojoExecute(config).execute();
}

常见问题

  • 生成后文档乱码&#xff1f;

    MySQL&#xff1a;URL加入?characterEncoding&#61;UTF-8

  • Caused by: java.lang.NoSuchFieldError: VERSION_2_3_30&#xff1f;

    检查项目freemarker依赖&#xff0c;这是由于版本过低造成的&#xff0c;升级版本为2.3.30即可。

  • java.lang.AbstractMethodError: oracle.jdbc.driver.T4CConnection.getSchema()Ljava/lang/String;

    这是因为oracle驱动版本过低造成的&#xff0c;删除或屏蔽目前驱动版本&#xff0c;驱动添加升级为以下版本&#xff1a;

    com.oracle.ojdbcojdbc819.3.0.0cn.easyprojectorai18n12.1.0.2.0

  • MySQL数据库表和列字段有说明、生成文档没有说明&#xff1f;

    URL链接加入useInformationSchema&#61;true即可。

  • java.lang.AbstractMethodError: com.mysql.jdbc.JDBC4Connection.getSchema()Ljava/lang/String;

    这是因为mysql驱动版本过低造成的&#xff0c;升级mysql驱动版本为最新即可

—————END—————推荐阅读&#xff1a;

  • IDEA 永久注册码来了&#xff01;&#xff01;&#xff01;

  • Nginx 这个功能就厉害了&#xff01;

  • 强烈推荐&#xff1a;一个比 Nginx 功能更强大的 Web 服务器

  • 基于SpringBoot 的CMS系统&#xff0c;拿去开发企业官网真香

  • 33 个 IDEA 最牛配置&#xff0c;写代码太爽了&#xff01;

  • 不要再封装各种Util工具类了&#xff0c;这个神级框架值得拥有&#xff01;

最近面试BAT&#xff0c;整理一份面试资料《Java面试BAT通关手册》&#xff0c;覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式&#xff1a;关注公众号并回复 java 领取&#xff0c;更多内容陆续奉上。
明天见(&#xff61;&#xff65;ω&#xff65;&#xff61;)&#xff89;♡


推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
author-avatar
佳臭臭_643
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有