package com.lunhan.xxx.common.orm2.gencolumn;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import java.io.File;
|
import java.io.FileWriter;
|
import java.io.IOException;
|
import java.io.PrintWriter;
|
import java.sql.*;
|
import java.util.LinkedHashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* 生成数据库列 MySql
|
*/
|
public class GenColumnMySql {
|
private final Connection conn;
|
private String outFilePath;
|
|
public GenColumnMySql(String url, String name, String password, String driver) throws ClassNotFoundException, SQLException {
|
//加载驱动
|
Class.forName(driver);
|
//获得连接
|
conn = DriverManager.getConnection(url, name, password);
|
}
|
|
public boolean run(String packageName, List<String> importList, String outPath) throws Exception {
|
if (conn == null || conn.isClosed()) {
|
return false;
|
}
|
|
outFilePath = new File("").getAbsolutePath() + "/" + outPath + "/" + packageName.replace(".", "/");
|
System.out.println("outFilePath:" + outFilePath);
|
File directory = new File(outFilePath);
|
directory.mkdirs();
|
|
try {
|
Map<String, String> tableInfo = this.getTableInfo(conn.getCatalog());
|
for (Map.Entry<String, String> item : tableInfo.entrySet()) {
|
String tableName = item.getKey();
|
String tableComment = item.getValue();
|
Map<String, String> columnInfoMap = this.getColumnInfo(tableName);
|
this.createColumnFile(tableName, tableComment, columnInfoMap, packageName, importList);
|
}
|
} finally {
|
conn.close();
|
}
|
return true;
|
}
|
|
private Map<String, String> getTableInfo(String tableSchema) throws SQLException {
|
Map<String, String> tableInfoMap = new LinkedHashMap<>();
|
String sql = " SELECT TABLE_NAME ,TABLE_COMMENT " +
|
" FROM information_schema.`TABLES` " +
|
" WHERE TABLE_SCHEMA = ? ";
|
try (PreparedStatement pStmt = conn.prepareStatement(sql)) {
|
pStmt.setString(1, tableSchema);
|
try (ResultSet rs = pStmt.executeQuery()) {
|
while (rs.next()) {
|
String tableName = rs.getString("TABLE_NAME");
|
String tableComment = rs.getString("TABLE_COMMENT");
|
tableInfoMap.put(tableName, tableComment);
|
}
|
}
|
}
|
return tableInfoMap;
|
}
|
|
private Map<String, String> getColumnInfo(String tableName) throws SQLException {
|
Map<String, String> columnInfoMap = new LinkedHashMap<>();
|
String sql = " SELECT COLUMN_NAME ,COLUMN_COMMENT " +
|
" FROM information_schema.`COLUMNS` " +
|
" WHERE TABLE_NAME = ? ";
|
try (PreparedStatement pStmt = conn.prepareStatement(sql)) {
|
pStmt.setString(1, tableName);
|
try (ResultSet rs = pStmt.executeQuery()) {
|
while (rs.next()) {
|
String columnName = rs.getString("COLUMN_NAME");
|
String columnComment = rs.getString("COLUMN_COMMENT");
|
columnInfoMap.put(columnName, columnComment);
|
}
|
}
|
}
|
return columnInfoMap;
|
}
|
|
private void createColumnFile(String tableName, String tableComment, Map<String, String> columnInfoMap, String packageName, List<String> importList) throws IOException {
|
String fileName = this.underline2Camel(tableName, true);
|
String filePath = this.outFilePath + "/" + fileName + ".java";
|
|
File columnFile = new File(filePath);
|
columnFile.createNewFile();
|
|
StringBuilder sb = new StringBuilder();
|
sb.append("/*\n" +
|
"# __----~~~~~~~~~~~------___\n" +
|
"# . . ~~//====...... __--~ ~~\n" +
|
"# -. \\_|// |||\\\\ ~~~~~~::::... /~\n" +
|
"# ___-==_ _-~o~ \\/ ||| \\\\ _/~~-\n" +
|
"# __---~~~.==~||\\=_ -_--~/_-~|- |\\\\ \\\\ _/~\n" +
|
"# _-~~ .=~ | \\\\-_ '-~7 /- / || \\ /\n" +
|
"# .~ .~ | \\\\ -_ / /- / || \\ /\n" +
|
"# / ____ / | \\\\ ~-_/ /|- _/ .|| \\ /\n" +
|
"# |~~ ~~|--~~~~--_ \\ ~==-/ | \\~--===~~ .\\\n" +
|
"# ' ~-| /| |-~\\~~ __--~~\n" +
|
"# |-~~-_/ | | ~\\_ _-~ /\\\n" +
|
"# / \\ \\__ \\/~ \\__\n" +
|
"# _--~ _/ | .-~~____--~-/ ~~==.\n" +
|
"# ((->/~ '.|||' -_| ~~-/ , . _||\n" +
|
"# -_ ~\\ ~~---l__i__i__i--~~_/\n" +
|
"# _-~-__ ~) \\--______________--~~\n" +
|
"# //.-~~~-~_--~- |-------~~~~~~~~\n" +
|
"# //.-~~~--\\\n" +
|
"# 神兽保佑\n" +
|
"# 代码无BUG! \n" +
|
"*/");
|
sb.append("\r\n");
|
sb.append(String.format("package %s;%n", packageName));
|
sb.append("\r\n");
|
for (String item : importList) {
|
sb.append(String.format("import %s;%n", item));
|
}
|
sb.append("\r\n");
|
sb.append("/**\r\n");
|
sb.append(String.format(" * %s%n", tableComment));
|
sb.append(" */\r\n");
|
sb.append(String.format("public enum %s implements ColumnBasic {%n", fileName));
|
int index = 1;
|
for (Map.Entry<String, String> item : columnInfoMap.entrySet()) {
|
String columnName = item.getKey();
|
String columnComment = item.getValue();
|
sb.append(" /**\r\n");
|
sb.append(String.format(" * %s%n", columnComment.replace("\r\n", "\r\n * ")));
|
sb.append(" */\r\n");
|
sb.append(String.format(" %s(\"%s\", %s),%n", columnName.toUpperCase(), columnName, index++));
|
}
|
sb.replace(sb.lastIndexOf(","), sb.length(), ";\r\n");
|
sb.append("\r\n");
|
sb.append(" private String columnName;\r\n");
|
sb.append(" private Integer columnIndex;\r\n");
|
sb.append(String.format(" public static final String TABLE_NAME = \"%s\";%n", tableName));
|
sb.append("\r\n");
|
sb.append(String.format(" %s(String columnName, Integer columnIndex) {%n", fileName));
|
sb.append(" this.columnName = columnName;\r\n");
|
sb.append(" this.columnIndex = columnIndex;\r\n");
|
sb.append(" }\r\n");
|
sb.append("\r\n");
|
sb.append(" @Override\r\n");
|
sb.append(" public String getColumnName() {\r\n");
|
sb.append(" return ColumnBuilder.getColumnName(TABLE_NAME, this.columnName);\r\n");
|
sb.append(" }\r\n");
|
sb.append("}");
|
|
try (FileWriter fw = new FileWriter(columnFile.getAbsolutePath());
|
PrintWriter pw = new PrintWriter(fw)) {
|
pw.println(sb.toString());
|
pw.flush();
|
}
|
}
|
|
private String underline2Camel(String line, boolean... firstIsUpperCase) {
|
String str = "";
|
if (StringUtils.isBlank(line)) {
|
return str;
|
} else {
|
StringBuilder sb = new StringBuilder();
|
String[] strArr;
|
// 不包含下划线,且第二个参数是空的
|
if (!line.contains("_") && firstIsUpperCase.length == 0) {
|
sb.append(line.substring(0, 1).toLowerCase()).append(line.substring(1));
|
str = sb.toString();
|
} else if (!line.contains("_") && firstIsUpperCase.length != 0) {
|
if (!firstIsUpperCase[0]) {
|
sb.append(line.substring(0, 1).toLowerCase()).append(line.substring(1));
|
str = sb.toString();
|
} else {
|
sb.append(line.substring(0, 1).toUpperCase()).append(line.substring(1));
|
str = sb.toString();
|
}
|
} else if (line.contains("_") && firstIsUpperCase.length == 0) {
|
strArr = line.split("_");
|
for (String s : strArr) {
|
sb.append(s.substring(0, 1).toUpperCase()).append(s.substring(1));
|
}
|
str = sb.toString();
|
str = str.substring(0, 1).toLowerCase() + str.substring(1);
|
} else if (line.contains("_") && firstIsUpperCase.length != 0) {
|
strArr = line.split("_");
|
for (String s : strArr) {
|
sb.append(s.substring(0, 1).toUpperCase()).append(s.substring(1));
|
}
|
if (!firstIsUpperCase[0]) {
|
str = sb.toString();
|
str = str.substring(0, 1).toLowerCase() + str.substring(1);
|
} else {
|
str = sb.toString();
|
}
|
}
|
}
|
return str;
|
}
|
|
// public static void main(String[] args) throws Exception {
|
// String url = "jdbc:mysql://81.68.189.38:3306/mall-test1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false";
|
// String name = "root";
|
// String password = "root";
|
// String driver = "com.mysql.jdbc.Driver";
|
// String outPath = "framework-common/src/test/java";
|
// String packageName = "com.ctrip.tour.cq.framework.common.test.dbcoulmns.orms";
|
// List<String> importList = new ArrayList() {{
|
// add("com.ctrip.tour.cq.framework.common.orm2.ColumnBuilder");
|
// add("com.ctrip.tour.cq.framework.common.orm2.enums.ColumnBasic");
|
// }};
|
// new GenColumnMySql(url, name, password, driver).run(packageName, importList, outPath);
|
// }
|
}
|