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

优质文章,第一时间送达

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

使用方式

普通方式

  • 引入依赖

<dependency><groupId>cn.smallbun.screw</groupId><artifactId>screw-core</artifactId><version>${lastVersion}</version></dependency>
  • 编写代码

/*** 文档生成*/
void documentGeneration() {//数据源HikariConfig hikariConfig = 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 = new HikariDataSource(hikariConfig);//生成配置EngineConfig engineConfig = EngineConfig.builder()//生成文件路径.fileOutputDir(fileOutputDir)//打开目录.openOutputDir(true)//文件类型.fileType(EngineFileType.HTML)//生成模板实现.produceType(EngineTemplateType.freemarker)//自定义文件名称.fileName("自定义文件名称").build();//忽略表ArrayList<String> ignoreTableName = new ArrayList<>();ignoreTableName.add("test_user");ignoreTableName.add("test_group");//忽略表前缀ArrayList<String> ignorePrefix = new ArrayList<>();ignorePrefix.add("test_");//忽略表后缀    ArrayList<String> ignoreSuffix = new ArrayList<>();ignoreSuffix.add("_test");ProcessConfig processConfig = ProcessConfig.builder()//指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时,将生成指定表,其余表不生成、并跳过忽略表配置 //根据名称指定表生成.designatedTableName(new ArrayList<>())//根据表前缀生成.designatedTablePrefix(new ArrayList<>())//根据表后缀生成 .designatedTableSuffix(new ArrayList<>())//忽略表名.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();
}

Maven 插件

<build><plugins><plugin><groupId>cn.smallbun.screw</groupId><artifactId>screw-maven-plugin</artifactId><version>${lastVersion}</version><dependencies><!-- HikariCP --><dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>3.4.5</version></dependency><!--mysql driver--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.20</version></dependency></dependencies><configuration><!--username--><username>root</username><!--password--><password>password</password><!--driver--><driverClassName>com.mysql.cj.jdbc.Driver</driverClassName><!--jdbc url--><jdbcUrl>jdbc:mysql://127.0.0.1:3306/xxxx</jdbcUrl><!--生成文件类型--><fileType>HTML</fileType><!--打开文件输出目录--><openOutputDir>false</openOutputDir><!--生成模板--><produceType>freemarker</produceType><!--文档名称 为空时:将采用[数据库名称-描述-版本号]作为文档名称--><fileName>测试文档名称</fileName><!--描述--><description>数据库文档生成</description><!--版本--><version>${project.version}</version><!--标题--><title>数据库文档</title></configuration><executions><execution><phase>compile</phase><goals><goal>run</goal></goals></execution></executions></plugin></plugins>
</build>

扩展模块

pojo生成功能

功能简介

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

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

数据库支持

  • MySQL

使用方式

  • 引入依赖

<dependency><groupId>cn.smallbun.screw</groupId><artifactId>screw-extension</artifactId><version>${lastVersion}</version></dependency>
  • 编写代码

/*** pojo生成*/
void pojoGeneration() {//数据源HikariConfig hikariConfig = 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 = new HikariDataSource(hikariConfig);ProcessConfig processConfig = ProcessConfig.builder()//指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时,将生成指定表,其余表不生成、并跳过忽略表配置//根据名称指定表生成.designatedTableName(new ArrayList<>())//根据表前缀生成.designatedTablePrefix(new ArrayList<>())//根据表后缀生成.designatedTableSuffix(new ArrayList<>()).build();//设置生成pojo相关配置PojoConfiguration config = 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();
}

常见问题

  • 生成后文档乱码?

    MySQL:URL加入?characterEncoding=UTF-8

  • Caused by: java.lang.NoSuchFieldError: VERSION_2_3_30?

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

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

    这是因为oracle驱动版本过低造成的,删除或屏蔽目前驱动版本,驱动添加升级为以下版本:

    <dependency><groupId>com.oracle.ojdbc</groupId><artifactId>ojdbc8</artifactId><version>19.3.0.0</version></dependency><dependency><groupId>cn.easyproject</groupId><artifactId>orai18n</artifactId><version>12.1.0.2.0</version></dependency>
  • MySQL数据库表和列字段有说明、生成文档没有说明?

    URL链接加入useInformationSchema=true即可。

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

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

—————END—————推荐阅读:
  • IDEA 永久注册码来了!!!

  • Nginx 这个功能就厉害了!

  • 强烈推荐:一个比 Nginx 功能更强大的 Web 服务器

  • 基于SpringBoot 的CMS系统,拿去开发企业官网真香

  • 33 个 IDEA 最牛配置,写代码太爽了!

  • 不要再封装各种Util工具类了,这个神级框架值得拥有!

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

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

  1. unity mysql生成cexcel_【C#附源码】数据库文档生成工具支持(Excel+Html)

    [2015] 很多时候,我们在生成数据库文档时,使用某些工具,可效果总不理想,不是内容不详细,就是表现效果一般般.很多还是word.html的.看着真是别扭.本人习惯用Excel,所以闲暇时,就简单的 ...

  2. 数据库文档生成工具V1.0

    这是一款基于C#开发语言编写的数据库文档生成工具,主要实现了 SQlServer+MYsql 数据库表结构说明文档的生成,并且支持 SQLServer 数据库的备份功能,主要可以把数据库的表以及表的详 ...

  3. wsdl文档中的soap:address的生成规则_BAT大牛都在使用的数据库文档生成插件,不来看一下?...

    一.概述 在企业级开发中.我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有.要么有.但都是手写.后期运维开发,需要手动进行维护到文档中,很是繁琐. ...

  4. postgre 生成数据库html文档_还在手动整理数据库文档?试试这个(螺丝钉)数据库文档生成工具...

    简介 在企业级开发中.我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有.要么有.但都是手写.后期运维开发,需要手动进行维护到文档中,很是繁琐.如果 ...

  5. Word文档生成神器:开源项目poi.tl使用介绍

    导航: Word文档生成神器:开源项目poi-tl使用介绍 一. 概述 1.1 适合的场景 1.2 poi-tl的优势 二. poi-tl实例演示: 2.1 使用poi-tl生成word文档 三. 更 ...

  6. 分享一款非常棒的数据库文档生成工具,可导出md、excel等格式

    1.背景 因为要给朋友项目补数据库文档,文档中需要填写数据库表结构等信息. 找了一个开源的.非常棒的数据库文档生成工具,可以导出word.excel(可编辑).md等格式..亲测,很棒,分享给大家.. ...

  7. 数据库文档生成数据库脚本工具

    数据库文档生成数据库脚本工具,txt->sql word文档: ---------------------------------------------------------- 图一 复制到 ...

  8. mysql 文档生成器_最好用的数据库文档生成工具

    一 前言 本文介绍一些比较流行的数据库文档生成工具,什么是数据库文档? 其实在工作中进行项目交付的时候经常用到:简单来说数据库文档就是对整个数据库设计说明的文档,比如使用了哪个数据库,每张表的字段,类 ...

  9. 推荐一个免费文档搜索下载网站http://freedownloadbooks.net/

    推荐一个免费文档搜索下载网站http://freedownloadbooks.net/

最新文章

  1. CentOS部署NetCore - 2. 安装NetCore SDK On CentOS
  2. CMD是什么?(命令行提示符)如何使用python在windows上操作CMD?(python执行命令行)os.syste[m](执行的命令)、os.popen(执行的命令)
  3. Another ORA-00600 internal error
  4. oracle biee 11g客户端连接OCI 10g/11g数据源时报错
  5. 运维linux脚本实例,Shell脚本使用示例
  6. 城市能源管理系统、实时监测、运行监测、负荷效应、预警管理、设备管理、设备入库、设备安装、设备检修、设备报废、设备查询、控制策略、系统集成、HTML/CSS/Bootstrap/jQuery/JS
  7. Linux操作系统:文件和目录命令
  8. Java基础知识强化之网络编程笔记22:Android网络通信之 Android常用OAuth登录(获取个人信息)...
  9. python爬虫 爬取网页图片
  10. 软件工程笔记四__实体联系图(ER图)
  11. 用这几种方式清理Mac缓存,你的Mac就不会卡了
  12. Apache CXF前端应用(Frontend)
  13. GitHub / 码云 Pages 打造个人在线简历
  14. 当“珊瑚虫”遇到腾讯
  15. Pytorch实现word2vec(Skip-gram训练方式)
  16. DataGridview单击某个单元格选中一行
  17. 英语考研语法--什么是英语句子?(刘晓艳--不就是语法和长难句吗)
  18. [hdu 6355] Fireflies
  19. Java求PI的几种方法
  20. 顺序队列的基本操作的实现及舞伴问题

热门文章

  1. 凹凸贴图(Bump Map)实现原理以及与法线贴图(Normal Map)的区别
  2. python爬虫热点项目—滑块验证码项目(以Bilili为例)
  3. tsp问题——遗传算法解决
  4. Windows中使用Termius
  5. Facebook广告效果数据获取
  6. 全球与中国网络连接视频门铃对讲机市场深度研究分析报告
  7. 【物理应用】大气辐射和透射率模型及太阳和月亮模型(Matlab代码实现)
  8. Python编程好不好学?入门难吗?
  9. fone出席CXO智库峰会,分享“老板需要什么样的全面预算?”
  10. CKPT,SMON,PMON,RECO,Dnnn