未优化版本!
private String tablename = "";
private String[] colnames;
private String[] colTypes;
private int[] colSizes; // 列名大小
private int[] colScale; // 列名小数精度
private boolean importUtil = false;
private boolean importSql = false;
private boolean importMath = false;
public void tableToEntity(String tName) throws Exception {
tablename = tName;
//数据连Connection获取,自己想办法就行.
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/oa", "root", "root");
String strsql = "SELECT * FROM " + tablename + " limit 1";//读一行记录
try {
PreparedStatement pstmt = conn.prepareStatement(strsql);
pstmt.executeQuery();
ResultSetMetaData rsmd = pstmt.getMetaData();
int size = rsmd.getColumnCount(); // 共有多少列
colnames = new String[size];
colTypes = new String[size];
colSizes = new int[size];
colScale = new int[size];
for (int i = 0; i < rsmd.getColumnCount(); i++) {
rsmd.getCatalogName(i + 1);
colnames[i] = rsmd.getColumnName(i + 1).toLowerCase();
colTypes[i] = rsmd.getColumnTypeName(i + 1).toLowerCase();
colScale[i] = rsmd.getScale(i + 1);
if ("datetime".equals(colTypes[i])) {
importUtil = true;
}
if ("image".equals(colTypes[i]) || "text".equals(colTypes[i])) {
importSql = true;
}
if (colScale[i] > 0) {
importMath = true;
}
colSizes[i] = rsmd.getPrecision(i + 1);
}
String[] s = tablename.split("_");
String str = "";
if (s.length <= 1) {
str = initcap(s[0]);
} else {
str = initcap(s[0]);
for (int v = 1; v < s.length; v++) {
str += initcap(s[v]);
}
}
tablename = str;
String content = parse();
try {
FileWriter fw = new FileWriter(initcap(tablename) + ".java");
PrintWriter pw = new PrintWriter(fw);
pw.println(content);
pw.flush();
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 解析处理(生成实体类主体代码)
*/
private String parse() {
StringBuffer sb = new StringBuffer();
sb.append("package com.husa.pojos;");
sb.append("\r\nimport java.io.Serializable;\r\n");
sb.append("\r\nimport lombok.Data;\r\n");
sb.append("\r\nimport lombok.experimental.Accessors;\r\n");
sb.append("\r\nimport javax.persistence.GeneratedValue;\r\n");
sb.append("\r\nimport javax.persistence.Id;\r\n");
if (importUtil) {
sb.append("import java.time.LocalDateTime;\r\n");
}
if (importSql) {
sb.append("import java.sql.*;\r\n\r\n");
}
if (importMath) {
sb.append("import java.math.*;\r\n\r\n");
}
sb.append("@Data\r\n");
sb.append("@Accessors(chain = true)\r\n");
sb.append("public class " + tablename + " implements Serializable {\r\n");
processAllAttrs(sb);
sb.append("}\r\n");
return sb.toString();
}
/**
* 解析输出属性
*
* @return
*/
private void processAllAttrs(StringBuffer sb) {
sb.append("\tprivate static final long serialVersionUID = 1L;\r\n");
sb.append("\t @Id\r\n");
sb.append("\t@GeneratedValue(generator = \"JDBC\")\r\n");
for (int i = 0; i < colnames.length; i++) {
String[] s = colnames[i].split("_");
String str = "";
if (s.length <= 1) {
str = s[0];
} else {
str = s[0];
for (int v = 1; v < s.length; v++) {
str += initcap(s[v]);
}
}
sb.append("\tprivate " + oracleSqlType2JavaType(colTypes[i], colScale[i], colSizes[i]) + " "
+ str + ";\r\n");
}
sb.append("\r\n");
}
/**
* 把输入字符串的首字母改成大写
*
* @param str
* @return
*/
private 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);
}
/**
* 设别类型
*
* @param sqlType
* @param scale
* @return
*/
private String oracleSqlType2JavaType(String sqlType, int scale, int size) {
if (sqlType.equals("integer")) {
return "Integer";
} else if (sqlType.equals("long")) {
return "Long";
} else if (sqlType.equals("float")
|| sqlType.equals("float precision")
|| sqlType.equals("double")
|| sqlType.equals("double precision")
) {
return "BigDecimal";
} else if (sqlType.equals("number")
|| sqlType.equals("decimal")
|| sqlType.equals("numeric")
|| sqlType.equals("real")) {
return scale == 0 ? (size < 10 ? "Integer" : "Long") : "BigDecimal";
} else if (sqlType.equals("varchar")
|| sqlType.equals("varchar2")
|| sqlType.equals("char")
|| sqlType.equals("nvarchar")
|| sqlType.equals("nchar")) {
return "String";
} else if (sqlType.equals("datetime")
|| sqlType.equals("date")
|| sqlType.equals("timestamp")) {
return "LocalDateTime";
} else if (sqlType.equalsIgnoreCase("TINYINT")) {
return "Boolean";
} else if (sqlType.equalsIgnoreCase("INT")) {
return "Integer";
}
return null;
}
public static void main(String[] args) throws Exception {
Demo t = new Demo();
// 获取 javaBean
t.tableToEntity("table_name");
}