1 screw(螺丝钉)介绍

1.2 特点

  • 简洁、轻量、设计良好
  • 多数据库支持
  • 多种格式文档
  • 灵活扩展
  • 支持自定义模板

1.2 文档生成支持

  • html
  • word
  • markdown

1.3 文档截图

1.3.1 html


1.3.2 word

1.3.3 markdwon


2 SpringBoot使用

2.1 依赖

<!--数据库文档核心依赖-->
<dependency><groupId>cn.smallbun.screw</groupId><artifactId>screw-core</artifactId><version>1.0.2</version>
</dependency>
<!-- 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>

2.2 测试

package com.example.adminlayui;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.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;@SpringBootTest
class ScrewApplicationTests {@Testvoid contextLoads() throws SQLException, IOException {String dbName = "admin2";HikariConfig config = new HikariConfig();config.setDriverClassName("com.mysql.cj.jdbc.Driver");config.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/" + dbName +" ?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8&useInformationSchema=true");config.setUsername("root");config.setPassword("123456");config.addDataSourceProperty("useInformationSchema", "true");config.setMinimumIdle(2);config.setMaximumPoolSize(5);DataSource ds = new HikariDataSource(config);//生成文件路径String userDir = System.getProperty("user.dir") + "\\src\\test\\java\\com\\pdool\\";System.out.println(userDir);SimpleDateFormat dataFormat = new SimpleDateFormat("yyyyMMdd");String versionStr = dataFormat.format(new Date());//忽略表List<String> ignoreTable = new ArrayList<>();//忽略表前缀List<String> ignorePrefix = new ArrayList<>();//忽略表后缀List<String> ignoreSuffix = new ArrayList<>();ignoreSuffix.add("_test");ignoreSuffix.add("test");for (int i = 0; i < 10; i++) {ignoreSuffix.add(String.valueOf(i));}//生成HTML模板createHtml(ds, userDir, versionStr, ignoreTable, ignorePrefix, ignoreSuffix);//生成SQL建表语句createSql(dbName, ds, userDir, versionStr, ignoreTable, ignorePrefix, ignoreSuffix);}/*** 创建html* @param dataSource* @param userDir* @param versionStr* @param ignoreTable* @param ignorePrefix* @param ignoreSuffix*/public static void createHtml(DataSource dataSource, String userDir, String versionStr, List<String> ignoreTable, List<String> ignorePrefix, List<String> ignoreSuffix) {//生成配置EngineConfig engineConfig = EngineConfig.builder()//生成文件路径.fileOutputDir(userDir)//打开目录.openOutputDir(false)//文件类型.fileType(EngineFileType.HTML)//生成模板实现.produceType(EngineTemplateType.freemarker).build();ProcessConfig processConfig = ProcessConfig.builder()//忽略表名.ignoreTableName(ignoreTable)//忽略表前缀.ignoreTablePrefix(ignorePrefix)//忽略表后缀.ignoreTableSuffix(ignoreSuffix).build();Configuration config = Configuration.builder()//版本.version(versionStr)//数据库描述.description("数据库文档")//数据源.dataSource(dataSource)//生成配置.engineConfig(engineConfig)//生成配置.produceConfig(processConfig).build();new DocumentationExecute(config).execute();}/*** 生成建表sql* @param dbName* @param dataSource* @param userDir* @param versionStr* @param ignoreTable* @param ignorePrefix* @param ignoreSuffix* @throws IOException* @throws SQLException*/public static void createSql(String dbName, DataSource dataSource, String userDir, String versionStr, List<String> ignoreTable, List<String> ignorePrefix, List<String> ignoreSuffix) throws IOException, SQLException {Statement tmt = null;PreparedStatement pstmt = null;List<String> createSqlList = new ArrayList<>();String sql = "select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = '"+dbName+"' and TABLE_TYPE = 'BASE TABLE'";tmt = dataSource.getConnection().createStatement();pstmt = dataSource.getConnection().prepareStatement(sql);ResultSet res = tmt.executeQuery(sql);while (res.next()) {String tableName = res.getString(1);if (tableName.contains("`")) {continue;}if (ignoreTable.contains(tableName)) {continue;}boolean isContinue = false;for (String prefix : ignorePrefix) {if (tableName.startsWith(prefix)) {isContinue = true;break;}}if (isContinue) {continue;}for (String suffix : ignoreSuffix) {if (tableName.startsWith(suffix)) {isContinue = true;break;}}if (isContinue) {continue;}ResultSet rs = pstmt.executeQuery("show create Table `" + tableName + "`");while (rs.next()) {createSqlList.add("DROP TABLE IF EXISTS '" + tableName + "'");createSqlList.add(rs.getString(2));}}String head = "-- 数据库建表语句 \r\n";head += "-- db:" + dbName + " version: " + versionStr + "\r\n";String collect = String.join(";\r\n", createSqlList);collect = head + collect + ";";string2file(collect, userDir + dbName + "_" + versionStr + ".sql");}public static void string2file(String collect, String dirStr) throws IOException {System.out.println("文件地址  "+ dirStr);OutputStreamWriter osw = null;try {osw = new OutputStreamWriter(new FileOutputStream(new File(dirStr)), StandardCharsets.UTF_8);osw.write(collect);osw.flush();} finally {if (osw != null) {osw.close();}}}}

2.3 结果


3 生成类型

3.1 生成HTML

//生成配置
EngineConfig engineConfig = EngineConfig.builder()//生成文件路径.fileOutputDir(userDir)//打开目录.openOutputDir(false)//文件类型.fileType(EngineFileType.HTML)//生成模板实现.produceType(EngineTemplateType.freemarker).build();

3.2 生成Word

//生成配置
EngineConfig engineConfig = EngineConfig.builder()//生成文件路径.fileOutputDir(userDir)//打开目录.openOutputDir(false)//文件类型.fileType(EngineFileType.WORD)//生成模板实现.produceType(EngineTemplateType.freemarker).build();

3.3 生成Markdwon

//生成配置
EngineConfig engineConfig = EngineConfig.builder()//生成文件路径.fileOutputDir(userDir)//打开目录.openOutputDir(false)//文件类型.fileType(EngineFileType.MD)//生成模板实现.produceType(EngineTemplateType.freemarker).build();

4 扩展pojo生成

4.1 依赖

<dependency>    <groupId>cn.smallbun.screw</groupId>    <artifactId>screw-extension</artifactId>    <version>${lastVersion}</version>
</dependency>

4.2 代码

/**    * 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");    //设置是否使用lombok    config.setUseLombok(false);    //设置数据源    config.setDataSource(dataSource);    //设置命名策略    config.setNameStrategy(new HumpNameStrategy());    //设置表过滤逻辑    config.setProcessConfig(processConfig);    //执行生成    new PojoExecute(config).execute();
}

利用java代码一键生成数据库文档相关推荐

  1. IDEA常用高效开发工具——screw一键生成数据库文档

    screw [介绍:一键生成数据库文档,从此告别人工整理文档] a:数据库支持: MySQL MariaDB TIDB Oracle SqlServer PostgreSQL Cache DB b:配 ...

  2. 数据库界的Swagger:一键生成数据库文档!你不了解一下?

    对于API的文档,我们有Swagger等工具来自动生成了.但有有一类文档还是常常困扰着我们,那就是数据库表结构的文档.相信很多同学都有过手写数据库表结构文档 的经历吧?常规操作就是一通无脑的 CV 大 ...

  3. 实用!一键生成数据库文档,堪称数据库界的Swagger

    最近部门订单业务调整,收拢其他业务线的下单入口,做个统一大订单平台.需要梳理各业务线的数据表,但每个业务线库都有近百张和订单相关的表,挨个表一个一个字段的弄脑瓜子嗡嗡的. 为了不重复 CV 操作,抱着 ...

  4. swagger连接mysql数据库_一键生成数据库文档,堪称数据库界的Swagger,有点厉害!...

    最近部门订单业务调整,收拢其他业务线的下单入口,做个统一大订单平台.需要梳理各业务线的数据表,但每个业务线库都有近百张和订单相关的表,挨个表一个一个字段的弄脑瓜子嗡嗡的. 为了不重复 CV 操作,抱着 ...

  5. 超给力,抛弃手动维护,一键生成数据库文档、支持多种格式!

    点击关注公众号,实用技术文章及时了解 简介 在企业级开发中.我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有.要么有.但都是手写.后期运维开发,需 ...

  6. 好用!一键生成数据库文档,这个开源的文档生成工具值得了解

    Gitee项目地址,可以直接去开源项目查看(推荐) https://gitee.com/leshalv/screw 简介 在企业级开发中.我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家 ...

  7. 实用,一键生成数据库文档

    screw 项目: 一.数据库支持 MySQL MariaDB TIDB Oracle SqlServer PostgreSQL Cache DB 二.配置 pom文件 引入screw核心包,Hika ...

  8. 全能代码生成器,自动生成前后端代码、生成项目框架、生成JavaBean、生成数据库文档、自动化部署项目(TableGo v8.0.0)

    TableGo_20220801 v8.0.0 正式版发布,此次版本累计更新如下:  1.生成项目功能新增支持若依框架,可同时生成若依框架代码和所有业务表的前后端基础CRUD代码,一键搞定所有  2. ...

  9. DM8(达梦数据库)基于建库SQL生成ER图,基于ER图生成数据库文档

    今天项目经理让我导出DM8 数据库说明文档,我立刻想到了数据库文档生成工具(screw-钉子),我立刻添加相关maven 依赖,编写junit 单元代码.但是执行的结果让我很沮丧. 相关依赖和Juni ...

最新文章

  1. Mac Os 基本命令行
  2. linux命令fdisk
  3. Bootstrap3 带条纹的表格样式
  4. 【Linux】nohup后台运行 关闭ssh 后 后台程序停止
  5. C# 微信服务号模板消息中如何换行
  6. Ubuntu中如何打开终端terminal
  7. DDMF PluginDoctor Mac - 插件分析器音频质量测试
  8. 为什么网站服务器不存在了,百度数据中有网站不存在的路径是什么原因
  9. 人工神经网络评价法案例_人工神经网络评价法
  10. . 尐儍苽 推荐一个专业的社团网站给您
  11. MSP430 TTP229 单片机 触摸按键 实践 51单片机 触摸键盘
  12. linux程序卸载失败怎么办,在Deepin下卸载LibreOffice等软件的方法,附卸载失败的原因...
  13. Java - 读写文件
  14. Bootstrap 框架使用
  15. 国家电网入局区块链,打造国家级能源互联网
  16. [总结]读取应用程序/类库配置文件(比如***.dll.config)的方法小结
  17. Beginning WF4读书笔计 - 第一章 03设计示图及xaml代码
  18. Python 视频教程 ( 猿课 )
  19. AR——增强现实技术
  20. 二元关系的性质与二元关系:等价,相容,偏序

热门文章

  1. oracle和勇士,坑与“借鉴”,都是KPI逼的?
  2. Origin绘图的步骤?
  3. ubuntu14.04 酷我音乐盒版本
  4. 2022-2023寒假
  5. 简单便宜智能家居解决方案
  6. 炒货币赚钱吗 炒数字货币赚钱吗
  7. python爬取今日头条后台数据_爬虫爬取今日头条数据代码实现
  8. 数值分析思考题(钟尔杰版)参考解答——第八章
  9. 某大型展会现场病毒排查事例及安全规划建议
  10. cpolra实现内网穿透,无须公网ip