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);
}
}
}