使用JDBC实现通过数据库的表生成一个Bean对象
原理分析:我们在使用数据库时,通过dateSource可以获取到元数据,即getMetaData();通过这个可以获取到任意一张表,任意一个字段的信息。由此,基于ORM思想,我们加上一点反射即可实现相关操作。
使用JDBC实现通过数据库的表生成一个Bean对象
public static void major(String path, String tableName) {//主体部分
StringBuilder s = new StringBuilder("package ");
String substring = path.substring(14); // 获取包名信息
String[] split = substring.split("[/]");
for (int i = 0; i < split.length; i++) {
if (i == split.length - 1) {
s.append(split[i] + ";\n\n");
} else {
s.append(split[i] + ".");
}
} //第一行包名,OK
s.append("public class "+ToUpper(tableName)+" {\n");//声明类
StringBuilder propertyValue = getPropertyAndGetSetMethod(tableName);
s.append(propertyValue+"}");//属性值,getXxx,setXxx方法
Write(path, tableName, s.toString());
}
private static StringBuilder getPropertyAndGetSetMethod(String tableName){
StringBuilder stringBuilder1 = new StringBuilder();
StringBuilder stringBuilder2 = new StringBuilder();
try {
Connection connection = JdbcUtil.getConnection();//手写的工具类
Statement statement =connection.createStatement();
ResultSet resultSet = statement.executeQuery("select * from " + tableName.toUpperCase());
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
String columnName = metaData.getColumnName(i).toLowerCase();
String columnTypeName = metaData.getColumnTypeName(i).toLowerCase();
if (columnTypeName.equals("number")) columnTypeName="int";
if (columnTypeName.equals("varchar2")) columnTypeName="String";
stringBuilder1.append("\tprivate "+columnTypeName+" "+columnName+";\n");//属性
stringBuilder2.append("\tpublic void set"+ToUpper(columnName)+"("+columnTypeName+" "+columnName
+") { this."+columnName+" = "+columnName+"; }\n\n");//set方法
stringBuilder2.append("\tpublic "+columnTypeName+" get"+ToUpper(columnName)
+"() { return "+columnName+"; }\n\n");//get方法
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return stringBuilder1.append("\n"+stringBuilder2);
}
private static void Write(String path, String tableName, String content) {
String s1 = path + "/" + ToUpper(tableName) + ".java";
try {
BufferedWriter bf = new BufferedWriter(new FileWriter(s1));
bf.write(content);
bf.flush();
bf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private static String ToUpper(String s){
return s.substring(0,1).toUpperCase()+s.substring(1);
}
以上只是部分代码,大体已经完成
测试
@Test
public void test26() {
String path = "src/main/java/jdbc/domain";
String tableName="s_emp2";
TableToBean.major(path, tableName);
}
表名和字段
效果
完全OK