数据库表结构上下文

package som.gu.core;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.gu.bean.columnInfo;
import com.gu.bean.tableInfo;
import com.gu.utils.StringUtils;
import com.gu.utils.javaFieldUtils;

/**
 * 负责获取管理数据库所有表结构和类结构的关系,并可以根据表结构生成类结构。
 * @author 
 *
 */
public class tableContext {

    /**
     * 表名为key,表信息对象为value
     */

    public static  Map<String,tableInfo>  tables = new HashMap<String,tableInfo>();
    
    /**
     * 
     */
    public static  Map<Class,tableInfo>  poClassTableMap = new HashMap<Class,tableInfo>();
    
    
    private tableContext(){}
    static {
        try {
            //初始化获得表的信息
            Connection con = DBManager.getConnect();
            DatabaseMetaData dbmd = con.getMetaData(); 
            
            ResultSet tableRet = dbmd.getTables(null, "%","%",new String[]{"TABLE"}); 
            
            while(tableRet.next()){
                String tableName = (String) tableRet.getObject("TABLE_NAME");
                
                tableInfo ti = new tableInfo(tableName,new HashMap<String, columnInfo>() ,new ArrayList<columnInfo>());
                tables.put(tableName, ti);
                
                ResultSet set = dbmd.getColumns(null, "%", tableName, "%"); 
                while(set.next()){
                    columnInfo ci = new columnInfo(set.getString("COLUMN_NAME"), 
                            set.getString("TYPE_NAME"), 0);
                    ti.getColumns().put(set.getString("COLUMN_NAME"), ci);
                }
                
                ResultSet set2 = dbmd.getPrimaryKeys(null, "%", tableName); 
                while(set2.next()){
                    columnInfo ci2 = (columnInfo) ti.getColumns().get(set2.getObject("COLUMN_NAME"));
                    ci2.setKeyType(1);  
                    ti.getPriKeys().add(ci2);
                }
                
                if(ti.getPriKeys().size()>0){  
                    ti.setOnlyPriKey(ti.getPriKeys().get(0));
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        

    
    }
    /**
     * 根据数据库表结构生成类结构
     */
    
    public static void updateJavaPoFile(){
         Map<String,tableInfo>  tables=tableContext.tables;
         for(tableInfo table:tables.values()){
             javaFieldUtils.creatJavaPoFile(table,new MysqlTypeConvertor());
            
         }
        
    }
    /**
     * 将po的class对象和表信息对象关联起来,便于重用!
     */
    public static  void LoadPoTables(){
        /*Class c=Class.forName("");
        poClassTableMap.put(key, value)
*/    
        for(tableInfo table:tables.values()){
            Class c=null;
            try {    
                c = Class.forName(DBManager.getPoPackage()+"."+StringUtils.firstChar2uppercase(table.gettName()));
            
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            poClassTableMap.put(c,table);
        }
        }
    
    
    

}

 

posted @ 2016-10-18 13:38  mmmmgxt  阅读(411)  评论(0编辑  收藏  举报