数据库表结构上下文
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); } } }