根据数据库表结构自动生成类结构

上篇博文metadata类的相关介绍已经完成了将数据库信息存储到Java容器内,所以可根据已有的数据库信息生成Java类结构。

一般步骤:

1 生成包名和类声明
2 生成字段声明
3 生成set/get方法
4 写入指定路径


数据库信息封装到Map mapField=new HashMap()容器内(具体参考上篇博文),分别封装了表名,对应的属性信息(属性名和属性数据类型)。通过循环此容器获取表信息。

1 准备相关容器            
StringBuffer sb=new StringBuffer();//存放一张表的javabean信息
Map fields=Meta.getMapField().get(fname);//获取列信息和数据类型,fname为for-each循环一部分,表名

List listF=new ArrayList();//存放该表所有列名
Iterator iter=fields.keySet().iterator();//将Set集合转为List集合便于以后操作
while(iter.hasNext()){
        istF.add(iter.next());
}
2 生成包名和类声明
//配置信息中封装包名(用户指定将生成的Javabean放入哪个包内)
//DBManager类给Configuration类赋值
//StringUtils.toUp将字符串首字符大写(以上类具体实现,不再赘述)

sb.append("package"+DBManager.conf.getFilePackage()+";"+"\n\n\n");
sb.append("public class "+StringUtils.toUp(fname)+"{\n\n");
3 生成属性声明
//listF.get(i)获取列名
//fields.get(listF.get(i))根据列名获取对应的数据类型
//convertor类型转换器,将数据库数据类型转为Java数据类型(最好转为包裹类)

for(int i=0;i"\t"+"private"+convertor.convertor((String)fields.get(listF.get(i)))+" "+listF.get(i)+";\n");

}
4 生成set方法
//set方法 public void setName(Object name){this.name=name;}

for(int i=0;i
    sb.append("\t"+"public void set"+StringUtils.toUp(listF.get(i))+"("+convertor.convertor((String)fields.get(listF.get(i)))+" "+listF.get(i)+")");

        sb.append("{"+"\n\t\t"+"this."+listF.get(i)+"="+listF.get(i)+";\n\t"+"}\n");
}
5 生成get方法
//get方法public String getName(){return this.name;}

for(int i=0;i
    sb.append("\tpublic"+convertor.convertor((String)fields.get(listF.get(i)))                      +" get"+StringUtils.toUp(listF.get(i))+"(){\n\t\t"+"return this."+listF.get(i)+";\n\t}\n");
}
6使用IO流写入指定包内
BufferedWriter br=null;
File file=new File(DBManager.conf.getSrcPath()+"/"+DBManager.conf.getFilePackage();
if(!file.exists()){//路径不存在,则建立路径
        file.mkdirs();
}

br=new BufferedWriter(new FileWriter(new File(file+"/"+StringUtils.toUp(fname)+".java")));
br.write(sb.toString());
br.flush();

最后关闭IO流。

将该段代码操作放在静态块内,使程序在加载的同时也生成了相关的javabean类。

总结:其本质操作不过是字符串的拼接,主要的还是要能够拿到数据库的相关信息并存储在java容器内。


不足之处:由于这是自己琢磨的,在结构和算法上有点繁琐,原先在使用metadata类获取数据库信息时就将其一股脑的存在了容器内,所以不便于后续操作。改进之处:可以将列信息(列名,数据类型等)另外用一个类封装,表信息也可用一个类来封装。

基本上已经将数据库和Java之间建立了桥梁,接下来便可以进行SQL语句操作。

你可能感兴趣的:(Java)