欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-15 19:36:26
...

上篇博文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<fields.size();i++){
                               sb.append("\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<fields.size();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<fields.size();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