java 解析标记语言_java读取mysql数据库结构,并生成Markdown标记语言文本

结构说明

项目结构非常简单,主要就creator下的3个类,读取数据库后记录的数据库结构信息保存到txt文件夹下,☝️表对应☝️txt文件。

c01d37c87c3a

1502862396067.jpg

Column.java 字段

package creator;

public class Column {

// 数据库字段名称

private String field;

// 服务端model属性名称

private String param;

// 数据库字段类型

private String type;

// 数据库字段注释

private String comment;

public Column(String field, String param, String type, String comment) {

this.field = field;

this.param = param;

this.type = type;

this.comment = comment;

}

// 此处省略getter setter

}

Table.java 表

package creator;

import java.util.List;

public class Table {

// 数据库表名

private String tableName;

// 服务端model名

private String objectName;

// 数据库表的建表语句

private String comment;

// 表包含的字段

private List columns;

public Table(String tableName, String objectName) {

this.tableName = tableName;

this.objectName = objectName;

}

// 此处省略getter setter

}

Runner.java 运行类

package creator;

import org.apache.commons.io.FileUtils;

import java.io.File;

import java.io.IOException;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;

/**

* 读取mysql数据库下表的结构信息

*/

public class Runner {

public static void main(String[] args) throws Exception {

// 获取数据库下的所有表名称

List

// 获得表的建表语句

buildTableComment(tables);

// 获得表中所有字段信息

buildColumns(tables);

// 写文件

write(tables);

}

/**

* 写文件

*/

private static void write(List

for (Table table : tables) {

System.out.println(table.getTableName());

StringBuilder buffer = new StringBuilder();

buffer.append("**表名:**" + table.getTableName() + "\n");

buffer.append("**对象:**" + table.getObjectName() + "\n");

buffer.append("**说明:**" + table.getComment() + "\n\n");

buffer.append("------------\n");

buffer.append("|参数|类型|说明|\n");

buffer.append("|:-------|:-------|:-------|\n");

List columns = table.getColumns();

for (Column column : columns) {

String param = column.getParam();

if ("del".equals(param) || "delDtm".equals(param)) continue;

String type = column.getType();

String comment = column.getComment();

buffer.append("|" + param + "|" + type + "|" + ("".equals(comment) ? "无" : comment) + "|\n");

}

String content = buffer.toString();

String path = System.getProperty("user.dir") + "/creator/txt/" + table.getObjectName() + ".txt";

try {

content = content.replaceAll("'", "\"");

FileUtils.writeStringToFile(new File(path), content);

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 连接数据库

*/

private static Connection getMySQLConnection() throws Exception {

Class.forName("com.mysql.jdbc.Driver");

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");

return conn;

}

/**

* 获取当前数据库下的所有表名称

*/

private static List

List

Connection conn = getMySQLConnection();

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("SHOW TABLES");

while (rs.next()) {

String tableName = rs.getString(1);

String objectName = camelCase(tableName);

Table table = new Table(tableName, objectName);

tables.add(table);

}

rs.close();

stmt.close();

conn.close();

return tables;

}

/**

* 获得某表的建表语句

*/

private static void buildTableComment(List

Connection conn = getMySQLConnection();

Statement stmt = conn.createStatement();

for (Table table : tables) {

ResultSet rs = stmt.executeQuery("SHOW CREATE TABLE " + table.getTableName());

if (rs != null && rs.next()) {

String createDDL = rs.getString(2);

String comment = parse(createDDL);

table.setComment(comment);

}

if (rs != null) rs.close();

}

stmt.close();

conn.close();

}

/**

* 获得某表中所有字段信息

*/

private static void buildColumns(List

Connection conn = getMySQLConnection();

Statement stmt = conn.createStatement();

for (Table table : tables) {

List columns = new ArrayList<>();

ResultSet rs = stmt.executeQuery("show full columns from " + table.getTableName());

if (rs != null) {

while (rs.next()) {

String field = rs.getString("Field");

String type = rs.getString("Type");

String comment = rs.getString("Comment");

Column column = new Column(field, camelCase(field), type, comment);

columns.add(column);

}

}

if (rs != null) {

rs.close();

}

table.setColumns(columns);

}

stmt.close();

conn.close();

}

/**

* 返回注释信息

*/

private static String parse(String all) {

String comment;

int index = all.indexOf("COMMENT='");

if (index < 0) {

return "";

}

comment = all.substring(index + 9);

comment = comment.substring(0, comment.length() - 1);

return comment;

}

/**

* 例如:employ_user_id变成employUserId

*/

private static String camelCase(String str) {

String[] str1 = str.split("_");

int size = str1.length;

String str2;

StringBuilder str4 = null;

String str3;

for (int i = 0; i < size; i++) {

if (i == 0) {

str2 = str1[i];

str4 = new StringBuilder(str2);

} else {

str3 = initcap(str1[i]);

str4.append(str3);

}

}

return str4.toString();

}

/**

* 把输入字符串的首字母改成大写

*/

private static String initcap(String str) {

char[] ch = str.toCharArray();

if (ch[0] >= 'a' && ch[0] <= 'z') {

ch[0] = (char) (ch[0] - 32);

}

return new String(ch);

}

}

结果示例

生成的数据库结构数据为Markdown标记语言风格的文本。

**表名:**user

**对象:**user

**说明:**用户

------------

|参数|类型|说明|

|:-------|:-------|:-------|

|id|int(11)|无|

|createDtm|datetime|[创建时间]|

|nickname|varchar(255)|[昵称]|

|address|varchar(255)|[联系地址]|

|phone|varchar(12)|[电话]|

|contact|varchar(255)|[联系方式]|

|email|varchar(255)|[邮箱]|

|headImg|varchar(255)|[头像]|

|password|varchar(40)|[密码]|

|sex|int(2)|[性别] 0:保密 1:男 2:女 |

将其使用Markdown风格展示效果为

参数

类型

说明

id

int(11)

createDtm

datetime

[创建时间]

nickname

varchar(255)

[昵称]

address

varchar(255)

[联系地址]

phone

varchar(12)

[电话]

contact

varchar(255)

[联系方式]

email

varchar(255)

[邮箱]

headImg

varchar(255)

[头像]

password

varchar(40)

[密码]

sex

int(2)

[性别] 0:保密 1:男 2:女

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值