简单的实现了Hibernate工具自动生成Class文件的功能。
package com.xiva.demo.util;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;
import org.apache.commons.io.FileUtils;
/**
*
* <功能简述> <详细描述>
*
* @author XIVA
* @version [1.0, 2013-5-1]
* @see [相关类/方法]
* @since [产品、模块版本]
*/
public class GenarateDomainClass
{
private static Connection conn;
private static StringBuffer classString;
private static String lineSep = System.getProperty("line.separator");
private static String fileName;
static
{
try
{
Class.forName("org.gjt.mm.mysql.Driver");
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
}
private static void ininConn() throws SQLException
{
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/blogsysdb?useUnicode=true&characterEncoding=utf-8", "blogdb",
"blogdb");
}
private static String getDataType(int type, int scale)
{
String dataType = "";
switch (type)
{
case Types.LONGVARCHAR: // -1
dataType = "Long";
break;
case Types.CHAR: // 1
dataType = "Character";
break;
case Types.NUMERIC: // 2
switch (scale)
{
case 0:
dataType = "Number";
break;
case -127:
dataType = "Float";
break;
default:
dataType = "Number";
}
break;
case Types.VARCHAR: // 12
dataType = "String";
break;
case Types.DATE: // 91
dataType = "Date";
break;
case Types.TIMESTAMP: // 93
dataType = "Date";
break;
case Types.BLOB:
dataType = "Blob";
break;
default:
dataType = "String";
}
return dataType;
}
private static void queryTable(String tableName) throws SQLException
{
PreparedStatement preStat = conn.prepareStatement("select * from " + tableName);
ResultSet result = preStat.executeQuery();
ResultSetMetaData resultMeta = result.getMetaData();
int colCount = resultMeta.getColumnCount();
String clazzName = convertName(tableName, true);
classString.append("public class " + clazzName + " extends BaseEntity {").append(lineSep);
fileName = clazzName;
for (int i = 1; i <= colCount; i++)
{
String dbColName = resultMeta.getColumnName(i);
String colType = getDataType(resultMeta.getColumnType(i), resultMeta.getScale(i));
String colName = convertName(dbColName, false);
if (!dbColName.equals(colName))
{
classString.append("@Column(name = \"" + dbColName + "\")").append(lineSep);
}
classString.append("private " + colType + " " + colName + ";").append(lineSep);
}
classString.append("}");
}
private static String convertName(String dbname, boolean isTable)
{
StringBuffer className = new StringBuffer(32);
String dbNameLow = dbname.toLowerCase();
String[] names = dbNameLow.split("_");
int len = names.length;
if (len > 1)
{
for (int i = 0; i < len; i++)
{
String name = names[i];
if (i == 0 && !isTable)
{
className.append(name);
continue;
}
className.append(name.substring(0, 1).toUpperCase());
className.append(name.substring(1));
}
}
else
{
className.append(dbNameLow);
}
return className.toString();
}
public static void ininData(String tableName)
{
classString = new StringBuffer(1024);
classString.append("package com.xiva.domain;").append(lineSep);
classString.append(lineSep);
classString.append("@Entity").append(lineSep);
classString.append("@Table(name = \"" + tableName + "\")").append(lineSep);
}
public static void createFile(String path)
{
String filePath = path + File.separator + fileName + ".java";
File file = new File(filePath);
try
{
System.out.println(filePath);
boolean isCreate = file.createNewFile();
System.out.println(isCreate);
FileUtils.write(file, classString, "utf-8");
}
catch (IOException e)
{
e.printStackTrace();
}
}
/**
*
* @param args
*/
public static void main(String[] args) throws SQLException
{
String tableName = "iv_resource";
String path = "F:\\WorkSpace\\GitProjects\\xivamsys\\src\\com\\xiva\\domain";
ininConn();
ininData(tableName);
queryTable(tableName);
createFile(path);
System.out.println(classString);
}
}
生成结果如下所示:
package com.xiva.domain;
@Entity
@Table(name = "iv_function")
public class IvFunction extends BaseEntity {
@Column(name = "func_id")
private String funcId;
@Column(name = "func_name")
private String funcName;
@Column(name = "func_desc")
private String funcDesc;
}
get set 的生成可以通过ctrl + shift + s快捷生成。导入的类,可以通过Ctrl + shift + o,格式化可以通过Ctrl + shift + f;文件路径可以指定。