根据数据库表结构生成相应的Java实体类
思路:
- 1、创建数据库连接
- 2、获取数据库表、表注释
- 3、获取数据库表中字段名、字段类型、字段注释
- 4、构建StringBuffer缓存
- 5、写入文件
- 6、关闭连接、输入流等等
使用方式:
- 1、修改数据源连接信息
- 2、修改实体配置信息
- 3、测试
package GenerPro;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
public class GenerOraclePro {
private static final String URL = "jdbc:oracle:thin:@192.168.100.247:1521:orcl";
private static final String NAME = "data_manage";
private static final String PASS = "data123";
private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
private String packageOutPath = "E:/pro/";
private String tableName = "MT_DS_TABLE";
private String packageName = "com.zebone.dataManage.common.vo";
private String authorName = "shihongxin";
private boolean f_util = true;
private boolean f_sql = true;
private String[] colsPre = { "F_NB_", "F_VC_", "F_CR_", "F_DT_"};
private String[] colnames;
private String[] colTypes;
private int[] colSizes;
private String pkFiled = null;
private Connection con = null;
private Statement pStemt = null;
private ResultSet rs = null;
private ResultSetMetaData rsmd = null;
public GenerOraclePro() {
connect();
getTableInfo(tableName);
colseConnect();
}
private void connect() {
try {
Class.forName(DRIVER);
con = DriverManager.getConnection(URL, NAME, PASS);
pStemt = (Statement) con.createStatement();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
private void colseConnect() {
try {
if (con != null) {
con.close();
con = null;
}
if (pStemt != null) {
pStemt.close();
pStemt = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private void getTableInfo(String tableName) {
int size = 0;
String sql = "SELECT * FROM " + tableName;
try {
rs = pStemt.executeQuery(sql);
rsmd = rs.getMetaData();
size = rsmd.getColumnCount();
colnames = new String[size];
colTypes = new String[size];
colSizes = new int[size];
for (int i = 0; i < size; i++) {
colnames[i] = rsmd.getColumnName(i + 1);
colTypes[i] = rsmd.getColumnTypeName(i + 1);
if (colTypes[i].equalsIgnoreCase("date") || colTypes[i].equalsIgnoreCase("timestamp")) {
f_util = true;
}
if (colTypes[i].equalsIgnoreCase("blob") || colTypes[i].equalsIgnoreCase("char")) {
f_sql = true;
}
colSizes[i] = rsmd.getColumnDisplaySize(i + 1);
}
pkFiled = getTablePk(tableName);
String tableComment = getTableComment(tableName);
StringBuffer tempSb = getColsInfo(tableName);
genFile(tableName, getSb(tableName, tableComment, tempSb));
} catch (SQLException e) {
e.printStackTrace();
}
}
public String getTablePk(String TableName){
String str = null;
String sql = "Select b.Column_Name pkFiled From user_Constraints a,user_Cons_Columns b Where a.Constraint_Type = 'P' "
+ " and a.Constraint_Name = b.Constraint_Name And a.Owner = b.Owner And a.table_name = b.table_name And a.table_name=upper('"+TableName+"') ";
try {
rs = pStemt.executeQuery(sql);
while (rs.next()) {
str = rs.getString("pkFiled");
if (null != str && str.indexOf("\r\n") != -1) {
str = str.replace("\r\n", "");
}
if (null != str && str.indexOf("\n") != -1) {
str = str.replace("\n", "");
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return str;
}
private String getTableComment(String tableName) {
String str = "";
String sql = "select * from user_tab_comments where table_name = '"+ tableName + "'";
try {
rs = pStemt.executeQuery(sql);
while (rs.next()) {
str = rs.getString("comments");
if (null != str && str.indexOf("\r\n") != -1) {
str = str.replace("\r\n", "");
}
if (null != str && str.indexOf("\n") != -1) {
str = str.replace("\n", "");
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return str;
}
private StringBuffer getColsInfo(String tableName) {
StringBuffer temp = new StringBuffer();
for (int i = 0; i < colnames.length; i++) {
temp.append("\r\n\t/*"+getColsName(colnames[i])+" - "+getColComment(tableName, colnames[i])+"*/\r\n");
if(pkFiled!=null && pkFiled.equals(getColsName(colnames[i]))){
temp.append("\t@PK\r\n");
}
temp.append("\t@Field(value=\""+getColsName(colnames[i])+"\")\r\n");
temp.append("\tprivate " + getColsType(colTypes[i]) + " "+ captureName(getColsName(colnames[i]),false) + ";\r\n");
}
for(int j = 0; j < colnames.length; j++){
String colname = captureName(getColsName(colnames[j]),false);
String colnameUp = captureName(getColsName(colnames[j]),true);
temp.append("\n\tpublic void set" + colnameUp + "(" + getColsType(colTypes[j]) + " " + colname + "){\r\n");
temp.append("\t\tthis." + colname + "=" + colname + ";\r\n");
temp.append("\t}\r\n");
temp.append("\n\tpublic " + getColsType(colTypes[j]) + " get" + colnameUp + "(){\r\n");
temp.append("\t\treturn " + colname + ";\r\n");
temp.append("\t}\r\n");
}
return temp;
}
private String getColsType(String sqlType) {
if (sqlType.equalsIgnoreCase("binary_double")) {
return "double";
} else if (sqlType.equalsIgnoreCase("binary_float")) {
return "float";
} else if (sqlType.equalsIgnoreCase("blob")) {
return "byte[]";
} else if (sqlType.equalsIgnoreCase("blob")) {
return "byte[]";
} else if (sqlType.equalsIgnoreCase("char") || sqlType.equalsIgnoreCase("nvarchar2") || sqlType.equalsIgnoreCase("varchar2")) {
return "String";
} else if (sqlType.equalsIgnoreCase("date") || sqlType.equalsIgnoreCase("timestamp") || sqlType.equalsIgnoreCase("timestamp with local time zone") || sqlType.equalsIgnoreCase("timestamp with time zone")) {
return "Date";
} else if (sqlType.equalsIgnoreCase("number")) {
return "Long";
}
return "String";
}
private String getColsName(String str) {
for (String temp : colsPre) {
int preIndex = str.indexOf(temp);
if (preIndex >= 0) {
str = str.substring(preIndex + temp.length());
str = str.replace("_", "").toLowerCase();
}
}
return str;
}
private String getColComment(String tableName, String columnName) {
String str = "";
String sql = "select comments from USER_COL_COMMENTS where table_name= '" + tableName + "' and column_name= '" + columnName + "'";
try {
rs = pStemt.executeQuery(sql);
while (rs.next()) {
str = rs.getString("comments");
if (null != str && str.indexOf("\r\n") != -1) {
str = str.replace("\r\n", "");
}
if (null != str && str.indexOf("\n") != -1) {
str = str.replace("\n", "");
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return str;
}
private StringBuffer getSb(String tableName, String tableComment,StringBuffer colSb) {
StringBuffer sb = new StringBuffer();
sb.append("package " + this.packageName + ";\r\n");
if (f_util) {
sb.append("import java.util.Date;\r\n");
}
if (f_sql) {
sb.append("import java.sql.*;\r\n");
}
sb.append("import com.zebone.platform.modules.dao.build.au.Table;\r\n");
sb.append("import com.zebone.platform.modules.dao.build.au.Field;\r\n");
sb.append("import com.zebone.platform.modules.dao.build.au.PK;\r\n");
sb.append("\r\n");
sb.append("\t/**\r\n");
sb.append(" * " + tableName + " 实体类 " + tableComment + "\r\n");
sb.append(" * " + new Date() + "\r\n");
sb.append(" * @author " + this.authorName + "\r\n");
sb.append(" */ \r\n");
sb.append("\r\n\r\n@Table(value=\""+tableName+"\")");
sb.append("\r\npublic class " + captureName(tableName,true) + "{\r\n");
sb.append("\tprivate static final long serialVersionUID = 1L;\r\n");
sb.append(colSb);
sb.append("}\r\n");
return sb;
}
private void genFile(String tableName, StringBuffer content) {
try {
String outputPath = this.packageOutPath + captureName(tableName,true) + ".java";
FileWriter fw = new FileWriter(outputPath);
PrintWriter pw = new PrintWriter(fw);
pw.println(content);
pw.flush();
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static String captureName(String name,boolean isUp) {
String[] fields = name.toLowerCase().split("_");
StringBuilder sbuilder = new StringBuilder(fields[0]);
for (int i = 1; i < fields.length; i++) {
char[] cs = fields[i].toCharArray();
cs[0] -= 32;
sbuilder.append(String.valueOf(cs));
}
name = sbuilder.toString();
if(isUp){
char[] cs = name.toCharArray();
if(cs[0] >= 97 && cs[0] <= 122) {
cs[0] -= 32;
}
name = String.valueOf(cs);
}
return name;
}
public static void main(String[] args) {
System.err.println("*****开始连接数据库,组装信息,生成文件.........");
new GenerOraclePro();
System.err.println("*****结束.........");
}
}