利用java代码一键生成数据库文档
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代码一键生成数据库文档相关推荐
- IDEA常用高效开发工具——screw一键生成数据库文档
screw [介绍:一键生成数据库文档,从此告别人工整理文档] a:数据库支持: MySQL MariaDB TIDB Oracle SqlServer PostgreSQL Cache DB b:配 ...
- 数据库界的Swagger:一键生成数据库文档!你不了解一下?
对于API的文档,我们有Swagger等工具来自动生成了.但有有一类文档还是常常困扰着我们,那就是数据库表结构的文档.相信很多同学都有过手写数据库表结构文档 的经历吧?常规操作就是一通无脑的 CV 大 ...
- 实用!一键生成数据库文档,堪称数据库界的Swagger
最近部门订单业务调整,收拢其他业务线的下单入口,做个统一大订单平台.需要梳理各业务线的数据表,但每个业务线库都有近百张和订单相关的表,挨个表一个一个字段的弄脑瓜子嗡嗡的. 为了不重复 CV 操作,抱着 ...
- swagger连接mysql数据库_一键生成数据库文档,堪称数据库界的Swagger,有点厉害!...
最近部门订单业务调整,收拢其他业务线的下单入口,做个统一大订单平台.需要梳理各业务线的数据表,但每个业务线库都有近百张和订单相关的表,挨个表一个一个字段的弄脑瓜子嗡嗡的. 为了不重复 CV 操作,抱着 ...
- 超给力,抛弃手动维护,一键生成数据库文档、支持多种格式!
点击关注公众号,实用技术文章及时了解 简介 在企业级开发中.我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有.要么有.但都是手写.后期运维开发,需 ...
- 好用!一键生成数据库文档,这个开源的文档生成工具值得了解
Gitee项目地址,可以直接去开源项目查看(推荐) https://gitee.com/leshalv/screw 简介 在企业级开发中.我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家 ...
- 实用,一键生成数据库文档
screw 项目: 一.数据库支持 MySQL MariaDB TIDB Oracle SqlServer PostgreSQL Cache DB 二.配置 pom文件 引入screw核心包,Hika ...
- 全能代码生成器,自动生成前后端代码、生成项目框架、生成JavaBean、生成数据库文档、自动化部署项目(TableGo v8.0.0)
TableGo_20220801 v8.0.0 正式版发布,此次版本累计更新如下: 1.生成项目功能新增支持若依框架,可同时生成若依框架代码和所有业务表的前后端基础CRUD代码,一键搞定所有 2. ...
- DM8(达梦数据库)基于建库SQL生成ER图,基于ER图生成数据库文档
今天项目经理让我导出DM8 数据库说明文档,我立刻想到了数据库文档生成工具(screw-钉子),我立刻添加相关maven 依赖,编写junit 单元代码.但是执行的结果让我很沮丧. 相关依赖和Juni ...
最新文章
- Mac Os 基本命令行
- linux命令fdisk
- Bootstrap3 带条纹的表格样式
- 【Linux】nohup后台运行 关闭ssh 后 后台程序停止
- C# 微信服务号模板消息中如何换行
- Ubuntu中如何打开终端terminal
- DDMF PluginDoctor Mac - 插件分析器音频质量测试
- 为什么网站服务器不存在了,百度数据中有网站不存在的路径是什么原因
- 人工神经网络评价法案例_人工神经网络评价法
- . 尐儍苽 推荐一个专业的社团网站给您
- MSP430 TTP229 单片机 触摸按键 实践 51单片机 触摸键盘
- linux程序卸载失败怎么办,在Deepin下卸载LibreOffice等软件的方法,附卸载失败的原因...
- Java - 读写文件
- Bootstrap 框架使用
- 国家电网入局区块链,打造国家级能源互联网
- [总结]读取应用程序/类库配置文件(比如***.dll.config)的方法小结
- Beginning WF4读书笔计 - 第一章 03设计示图及xaml代码
- Python 视频教程 ( 猿课 )
- AR——增强现实技术
- 二元关系的性质与二元关系:等价,相容,偏序