基于注解和反射的Java ORM框架(6)-数据库自动生成Java实体类源码

来源:互联网 发布:孟非睡女嘉宾 知乎 编辑:程序博客网 时间:2024/04/30 10:22

一,主要内容

本篇介绍从数据库自动生成Java实体类的代码。

二,配置文件

数据库连接参数、读取的数据库名、生成实体类的报名、生成实体类的保存地址、日志保存的地址都在配置文件中指明。

driver=com.mysql.jdbc.Driverurl=jdbc:mysql://127.0.0.1:3306/bank_performance?useUnicode=true&characterEncoding=utf-8user=rootpassword=Pass1234table_schema=bank_performanceentity_package_name=panda.bank.entityfile_save_path=D\:\\Java\\AutoEntity\\file_log_path=D\:\\Java\\AutoEntity\\

配置文件管理类如下:

package panda.orm.util;public class Constants {    public static Property CONFIG_PROPERTY;    public static String getFormatDateTime(){        SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        return formater.format(new Date());    }    public static String getLogFormatDateTime(){        SimpleDateFormat formater = new SimpleDateFormat("yyyyMMddhhmmss");        return formater.format(new Date());    }    static{        Properties fileProperties = new Properties();          InputStream inputStream = fileProperties.getClass().getResourceAsStream("/config.properties");          CONFIG_PROPERTY=new Property();        try{              fileProperties.load(inputStream);              CONFIG_PROPERTY.setDriver(fileProperties.getProperty("driver"));              CONFIG_PROPERTY.setUrl(fileProperties.getProperty("url"));              CONFIG_PROPERTY.setUser(fileProperties.getProperty("user"));              CONFIG_PROPERTY.setPassword(fileProperties.getProperty("password"));              CONFIG_PROPERTY.setTable_schema(fileProperties.getProperty("table_schema"));              CONFIG_PROPERTY.setFile_save_path(fileProperties.getProperty("file_save_path"));              CONFIG_PROPERTY.setFile_log_path(fileProperties.getProperty("file_log_path"));              CONFIG_PROPERTY.setEntity_package_name(fileProperties.getProperty("entity_package_name"));          }catch (IOException ex){              ex.printStackTrace();          }finally{              try {                inputStream.close();            } catch (IOException ex) {                ex.printStackTrace();            }          }      }}package panda.orm.util;public class Property{    private String driver;    private String url;    private String user;    private String password;    private String table_schema;    private String file_save_path;      private String file_log_path;    private String entity_package_name;        //get set省略

三,实体类生成器

package panda.orm.util;import java.io.File;import java.io.FileOutputStream;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.util.Date;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.Map;import java.util.Set;import panda.orm.database.MySQLHandler;import panda.orm.exception.SqlExcuteException;/** * MySql auto generate java classes * @author maoge * @date 2017.3.23 */public class EntityGenerater {    public static void main(String[] args) {        EntityGenerater.generateClasses();    }    public static void generateClasses(){        EntityGenerater eg=new EntityGenerater(Constants.CONFIG_PROPERTY.getTable_schema(),                Constants.CONFIG_PROPERTY.getEntity_package_name(),Constants.CONFIG_PROPERTY.getFile_save_path());        eg.init();        eg.write();        System.out.println("Panda ORM generate success!");    }    private Map<String,Set<String>> tables=new HashMap<String,Set<String>>();    private String table_schema;    private String entity_package_name;    private String entity_save_path;    public EntityGenerater(String table_schema,String entity_package_name,String entity_save_path){        this.table_schema=table_schema;        this.entity_package_name=entity_package_name;        this.entity_save_path=entity_save_path;    }    public void init(){        MySQLHandler hand=new MySQLHandler();        ResultSet rs=null;        String table_schema =Constants.CONFIG_PROPERTY.getTable_schema();        String sql="select table_name from information_schema.tables where table_schema='"+table_schema+"'";        tables.clear();        try {            rs=hand.query(sql);            while(rs.next()){                String tableName=rs.getString("table_name");                Set<String> columns=getColumns(tableName);                tables.put(tableName, columns);            }        } catch (Exception ex) {            new SqlExcuteException(ex.getMessage(),this.getClass().getName(),"sql:",sql);        }finally{            hand.sayGoodbye();        }    }    private Set<String> getColumns(String tableName){        MySQLHandler hand=new MySQLHandler();        ResultSet rs=null;        String sql="select * from "+tableName;        Set<String> columns=new HashSet<String>();        try {            rs=hand.query(sql);            ResultSetMetaData meta=rs.getMetaData();            int count=meta.getColumnCount();            for(int i=0;i<meta.getColumnCount();i++){                columns.add(meta.getColumnName(i+1));            }        }catch (Exception ex) {            new SqlExcuteException(ex.getMessage(),this.getClass().getName(),"sql:",sql);        }finally{            hand.sayGoodbye();        }        return columns;    }    public void write(){        Iterator iter = tables.entrySet().iterator();        while (iter.hasNext()) {            Map.Entry entry = (Map.Entry) iter.next();            String tableName = (String)entry.getKey();            Set<String> columns = (Set<String>)entry.getValue();            String entityString=getEntityString(tableName,columns);            try{                String path=entity_save_path+turnFirstUp(tableName)+".java";                File file=new File(path);                if(!file.exists())                    file.createNewFile();                FileOutputStream out=new FileOutputStream(file,true);                       out.write(entityString.getBytes("utf-8"));                out.close();            }            catch(Exception ex){                ex.printStackTrace();            }                  }    }    private String getEntityString(String tableName,Set<String> columns){        StringBuilder sb=new StringBuilder();        sb.append("package "+entity_package_name+";\r\n");        sb.append("/**\r\n");        sb.append("* " + new Date() + "\r\n");        sb.append("* Panda ORM atuo generate: " + tableName + " \r\n");        sb.append("*/ \r\n");           sb.append("public class " + turnFirstUp(tableName) + "{\r\n");        for(String colName:columns){            sb.append("\tprivate String "+colName+";\r\n");        }        for(String colName:columns){            sb.append("\tpublic String get"+turnFirstUp(colName)                    +"(){\r\n");            sb.append("\t\treturn "+colName+";\r\n");            sb.append("\t}\r\n");            sb.append("\tpublic void set"+turnFirstUp(colName)                    + "(String "+colName+"){\r\n");            sb.append("\t\tthis."+colName+"="+colName+";\r\n");            sb.append("\t}\r\n");        }        sb.append("}");        return sb.toString();    }    private String turnFirstUp(String str) {        char[] ch = str.toCharArray();        if(ch[0]>='a'&&ch[0]<='z'){            ch[0]=(char)(ch[0]-32);        }        return new String(ch);    }}

四,测试

数据库表结构如下

执行下面的方法

public static void main(String[] args) {        EntityGenerater.generateClasses();    }提示如下,并生生成对应实体类代码文件:

Panda ORM generate success!

打开User.java验证如下:

package panda.bank.entity;/*** Thu Mar 23 11:30:12 CST 2017* Panda ORM atuo generate: user */ public class User{    private String user_name;    private String user_role;    private String user_job;    private String user_password;    private String user_id;    private String user_department;    public String getUser_name(){        return user_name;    }    public void setUser_name(String user_name){        this.user_name=user_name;    }    public String getUser_role(){        return user_role;    }    public void setUser_role(String user_role){        this.user_role=user_role;    }    public String getUser_job(){        return user_job;    }    public void setUser_job(String user_job){        this.user_job=user_job;    }    public String getUser_password(){        return user_password;    }    public void setUser_password(String user_password){        this.user_password=user_password;    }    public String getUser_id(){        return user_id;    }    public void setUser_id(String user_id){        this.user_id=user_id;    }    public String getUser_department(){        return user_department;    }    public void setUser_department(String user_department){        this.user_department=user_department;    }}
0 0
原创粉丝点击