
生成数据库文档
生成数据库字典表 - WORD
使用java生成数据库表的word文档。
支持word、html、markdown。
还可以生成表的建表语句。
POM
<dependencies>
<!--数据库文档核心依赖-->
<dependency>
<groupId>cn.smallbun.screw</groupId>
<artifactId>screw-core</artifactId>
<version>1.0.3</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>
</dependencies>
代码
public class ScrewApplication {
public static void main(String[] args) {
//数据库名称
String dbName = "dbname";
HikariConfig config = new HikariConfig();
//jdbc驱动
config.setDriverClassName("com.mysql.cj.jdbc.Driver");
//数据库链接地址和用户名密码
config.setJdbcUrl("jdbc:mysql://ip:port/" + dbName +" ?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8&useInformationSchema=true");
config.setUsername("username");
config.setPassword("password");
config.addDataSourceProperty("useInformationSchema", "true");
config.setMinimumIdle(2);
config.setMaximumPoolSize(5);
DataSource ds = new HikariDataSource(config);
//生成文件路径
String userDir = "C:\\Users\\Desktop\\新建文件夹\\";
SimpleDateFormat dataFormat = new SimpleDateFormat("yyyyMMdd");
String versionStr = dataFormat.format(new Date());
//指定表
// List<String> tableNameList = Arrays.asList("xxxxx");
List<String> tableNameList = new ArrayList<>();
//忽略表
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));
}
//生成WORD模板
createHtml(ds, userDir, versionStr, ignoreTable, ignorePrefix, ignoreSuffix, tableNameList);
//生成SQL建表语句
// try {
// createSql(dbName, ds, userDir, versionStr, ignoreTable, ignorePrefix, ignoreSuffix);
// } catch (IOException e) {
// throw new RuntimeException(e);
// } catch (SQLException e) {
// throw new RuntimeException(e);
// }
}
/**
* 创建word
*
* @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, List<String> tableNameList) {
//生成配置
EngineConfig engineConfig = EngineConfig.builder()
//生成文件路径
.fileOutputDir(userDir)
//打开目录
.openOutputDir(false)
//文件类型
//支持word、html、markdown
.fileType(EngineFileType.WORD)
//生成模板实现
.produceType(EngineTemplateType.freemarker)
.build();
ProcessConfig processConfig = ProcessConfig.builder()
//忽略表名
.ignoreTableName(ignoreTable)
//忽略表前缀
.ignoreTablePrefix(ignorePrefix)
//忽略表后缀
.ignoreTableSuffix(ignoreSuffix)
.build();
if(!tableNameList.isEmpty()){
processConfig.setDesignatedTableName(tableNameList);
}
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();
}
}
}
}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 技术分享小站 https://zhsssme.com.cn/
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果