把数据库中的表结构转化实体类

package com.tool.desc;

public class FieldDesc {
	private int col;//序列号
	private String name;//列名
	private String type;//列类型
	private int precision;//类型长度
	private int scale;//小数位数
	public int getCol() {
		return col;
	}
	public void setCol(int col) {
		this.col = col;
	}
	//根据数据库字段返回java属性名称
	public String getName() {
		String[] s = this.name.toLowerCase().split("_");
		if(s.length==1) {
			return name.toLowerCase();
		}else {
			StringBuilder s1 = new StringBuilder();
			s1.append(s[0]);//第一部分
			for (int i = 0; i < s.length; i++) {
				//后面部分首字母大写
				s1.append(s[i].substring(0, 1).toUpperCase());
				s1.append(s[i].substring(1));
			}
			return s1.toString();
		}	
	}
	public void setName(String name) {
		this.name = name;
	}
	//根据数据库字段返回java属性类型
	public String getType() {
		if("NUMBER".equalsIgnoreCase(type)){//数值型
			if(this.scale==0){
				if(this.precision<=6){
					return "int";
				}else{
					return "long";
				}
			}else{
				if(this.precision<=8){
					return "float";
				}else{
					return "double";
				}				
			}
		}else if("DATE".equalsIgnoreCase(type)){
			return "Date";
		}else{
			return "String";
		}
}
	public void setType(String type) {
		this.type = type;
	}
	public int getPrecision() {
		return precision;
	}
	public void setPrecision(int precision) {
		this.precision = precision;
	}
	public int getScale() {
		return scale;
	}
	public void setScale(int scale) {
		this.scale = scale;
	}

}
package com.tool.desc;

import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Map;

public class ClassDesc {
	private String path;//类文件保存
	private String pkg;//包名
	private String name;//类名
	private List<FieldDesc> fields;//字段描述
	private Map<Integer,String> comments;//表注释(key-序列号,value-注释)

	public void print() {
		StringBuilder s1 = new StringBuilder();
		s1.append("package ").append(pkg).append(";\n\n");
		StringBuilder s2 = new StringBuilder();
		s2.append("public class ").append(name).append("{\n");
		StringBuilder s3 = new StringBuilder();
		//循环所有的字段
		for (FieldDesc fd : fields) {
			//生成注释
			s2.append("      //").append(this.getComment(fd.getCol())).append("\n");
			s2.append("    private ");
			if("Date".equals(fd.getType())) {
				s2.append(fd.getType()).append(" ");
			}else {
				s2.append(fd.getType()).append(" ");
			}
			s2.append(fd.getName()).append(";\n");
			//生成setter getter方法
			String name1 = fd.getName();
			//首字母大写
			String name2 = name1.substring(0, 1).toUpperCase()+name1.substring(1);
			//生成set方法
			s3.append("\n   public void ")
			.append("set").append(name2)
			.append("(").append(fd.getType())
			.append(" ").append(name1).append("){\n")
			.append("    \tthis.").append(name1)
			.append("=").append(name1).append(";\n")
			.append("     }\n");
			//生成get方法
			s3.append(" \n    public ").append(fd.getType())
			.append(" get").append(name2)
			.append("(").append("){\n")
			.append("    \treturn ").append(name1).append(";\n")
			.append("     }\n");
		}
		s2.append(s3);
		s2.append("}\n");
		System.out.println(s1.toString()+s2.toString());
		//保存到文件里
				try {
					File file = new File(this.path+"\\" + this.name+".java");
					if(!file.exists()){
						file.createNewFile();
					}
					FileOutputStream fos = new FileOutputStream(file);
					fos.write((s1.toString() + s2.toString()).getBytes("UTF-8"));
					fos.flush();
					fos.close();			
				} catch (Exception e) {
					e.printStackTrace();
				}	
		
	}
	public String getComment(Integer id) {
		return comments.get(id);
	}
	public String getPath() {
		return path;
	}

	public void setPath(String path) {
		this.path = path;
	}

	public String getPkg() {
		return pkg;
	}

	public void setPkg(String pkg) {
		this.pkg = pkg;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public List<FieldDesc> getFields() {
		return fields;
	}

	public void setFields(List<FieldDesc> fields) {
		this.fields = fields;
	}

	public Map<Integer, String> getComments() {
		return comments;
	}

	public void setComments(Map<Integer, String> comments) {
		this.comments = comments;
	}
}
package com.tool.desc;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.tool.util.DBUtil;

/**
 * 把表结构转化实体类
 * @author ZHQL
 */
public class Test {

	public static void main(String[] args) {
		String tableName = "emp";
		String className = "Emp";
		String pkg = "com.tool.entity";
		String path = "E:\\JAVA\\workspace\\jdbc20180715homework\\src\\com\\tool\\entity";
		ResultSet rs = null;
		try {
			String sql = "select * from " + tableName 
					+ " where 1=2";
			rs = DBUtil.execSelectSql(sql);
			ResultSetMetaData md = rs.getMetaData();
			int cols = md.getColumnCount();//列数
			List<FieldDesc> list = new ArrayList<FieldDesc>();
			FieldDesc fd = null;
			for (int i = 1; i <=cols; i++) {//读所有字段的信息
				fd = new FieldDesc();
				fd.setCol(i);
				fd.setName(md.getColumnName(i));
				fd.setType(md.getColumnTypeName(i));
				fd.setPrecision(md.getPrecision(i));
				fd.setScale(md.getScale(i));
				list.add(fd);
			}
			//类描述对象
			ClassDesc cd = new ClassDesc();
			cd.setFields(list);
			cd.setName(className);
			cd.setPkg(pkg);
			cd.setPath(path);	
			sql = "select t.COMMENTS" +
					" from user_col_comments t " +
					" where t.TABLE_NAME='"
					+ tableName.toUpperCase() +"'";
			rs = DBUtil.execSelectSql(sql);
			Map<Integer,String> map =
			new HashMap<Integer,String>();
			while(rs.next()){
				map.put(rs.getRow(),
						rs.getString("COMMENTS"));
			}
			cd.setComments(map);
			cd.print();//打印java代码
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			DBUtil.close(rs);
		}

	}

}

猜你喜欢

转载自blog.csdn.net/weixin_39788493/article/details/81171030