Java匯出Markdown格式的資料字典
阿新 • • 發佈:2020-12-29
Java匯出Markdown格式的資料字典
引入依賴
pom.xml
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.27</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
<scope>runtime< /scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<scope>provided</scope>
</dependency>
資料庫連線配置
application.yml
# 資料庫配置
db:
driver: com.mysql. cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?useSSL=true&verifyServerCertificate=false&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&allowMultiQueries=true
username: root
password: 123456
# 資料庫名
database:
- test
# 匯出配置
export:
# 資料夾
dir: D:\symon
編碼實現
- 獲取資料庫連線
protected Connection getConnection() throws ClassNotFoundException, SQLException {
if (connection == null) {
DatabaseConfig databaseConfig = config.getDb();
Class.forName(databaseConfig.getDriver());
connection = DriverManager.getConnection(databaseConfig.getUrl(), databaseConfig.getUsername(), databaseConfig.getPassword());
}
return connection;
}
- 查詢資料的表資訊
protected List<Table> getTables(PreparedStatement ps) throws SQLException {
List<Table> tables = new ArrayList<>();
try (ResultSet tableResult = ps.executeQuery()) {
while (tableResult.next()) {
String tableName = tableResult.getString(1);
String tableComment = StringUtils.nullToBlank(tableResult.getString(2));
Table table = new Table();
table.setTableName(tableName);
table.setTableComment(StringUtils.replaceSep(tableComment));
tables.add(table);
}
}
return tables;
}
protected List<Column> getColumns(Connection connection, PreparedStatement ps, String database, String tableName) throws SQLException {
List<Column> columns = new ArrayList<>();
try (ResultSet resultSet = ps.executeQuery()) {
List<String> primaryKeyColumnNames = getPrimaryKeyColumnNames(connection, database, tableName);
String primaryKeyComment = getPrimaryKeyComment(primaryKeyColumnNames.size());
while (resultSet.next()) {
Column column = new Column();
column.setOrdinal(resultSet.getInt(1));
column.setName(resultSet.getString(2));
column.setDataType(resultSet.getString(3));
column.setAllowNull(resultSet.getString(4));
column.setDefaultValue(StringUtils.nullToBlank(resultSet.getString(5)));
String comment = StringUtils.nullToBlank(resultSet.getString(6));
column.setComment(StringUtils.replaceSep(comment));
if (primaryKeyColumnNames.contains(column.getName()) && !comment.contains(primaryKeyComment)) {
comment = comment.length() != 0 ? primaryKeyComment + "," + comment : primaryKeyComment;
column.setComment(comment);
}
columns.add(column);
}
}
return columns;
}
- 匯出實現程式碼
private File export(Connection connection, String database) throws IOException, SQLException {
File markdownFile = getOutputFile(database);
try (FileWriter fileWriter = new FileWriter(markdownFile, false)) {
String title = String.format(PatternConstant.TITLE, database);
fileWriter.write(title);
writeLineSeparator(fileWriter, 2);
String exportDate = String.format(PatternConstant.DATE, new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
fileWriter.write(exportDate);
writeLineSeparator(fileWriter, 2);
List<Table> tables;
try (PreparedStatement ps = getTablePreparedStatement(connection, database)) {
tables = getTables(ps);
}
try (PreparedStatement ps = getColumnPreparedStatement(connection, database)) {
for (Table table : tables) {
String tableName = table.getTableName();
setColumnPreparedStatementParams(ps, tableName);
List<Column> columns = getColumns(connection, ps, database, tableName);
fileWriter.write(String.format(PatternConstant.CATALOG, tableName));
writeLineSeparator(fileWriter, 1);
fileWriter.write(String.format(PatternConstant.COMMENT, table.getTableComment()));
writeLineSeparator(fileWriter, 2);
fileWriter.write(PatternConstant.TABLE_HEADER);
writeLineSeparator(fileWriter, 1);
fileWriter.write(PatternConstant.TABLE_SEPARATOR);
writeLineSeparator(fileWriter, 1);
for (Column column : columns) {
fileWriter.write(String.format(PatternConstant.TABLE_BODY, getColumnValues(column)));
writeLineSeparator(fileWriter, 1);
}
writeLineSeparator(fileWriter, 2);
}
}
}
return markdownFile;
}