2011-03-29 49 views
1

我想爲我們的Web框架生成自定義域類型。我們擁有工程部分,我們可以對域類型進行建模,然後使用JPA註釋將其生成爲Java代碼。是否有數據庫逆向工程的框架?

我認爲是一種顛倒的方法,您可以在其中指定數據庫模式並獲取現在兼容的生成模型,反之亦然。

有沒有一個框架,你可以截取代,例如Hibernate POJO generation。應該可以訪問這些表,通過Java輕鬆獲取列名,類型,關係,主鍵。其餘的將由我來生成正確的模型。

任何建議如何開始?

回答

3

可以使用標準jdbc類獲得表,列名,索引等,請參閱DatabaseMetaData。這裏有一些代碼可能讓你開始:

static void dumpResultSet(ResultSet rs) throws SQLException { 
    ResultSetMetaData md = rs.getMetaData(); 
    int columnCount = md.getColumnCount(); 
    PrintStream out = System.out; 
    while (rs.next()) { 
     out.print("{\n"); 
     for (int i=1; i<=columnCount; i++) { 
      out.print(" "); 
      out.print(md.getColumnLabel(i)); 
      out.print(": "); 
      out.print(rs.getObject(i)); 

      if (i<columnCount-1) { 
       out.print(", "); 
      } 
      out.print("\n"); 
     } 
     out.print("}\n"); 
    } 
} 

Connection con = ...; 
DatabaseMetaData md = con.getMetaData(); 

dumpResultSet(md.getTables(null, null, null, new String[]{"TABLE", "VIEW"})); 
dumpResultSet(md.getColumns(null, null, "TABLE_NAME", null)); 
dumpResultSet(md.getExportedKeys(null, null, "TABLE_NAME")); 
dumpResultSet(md.getImportedKeys(null, null, "TABLE_NAME")); 
dumpResultSet(md.getPrimaryKeys(null, null, "TABLE_NAME")); 
dumpResultSet(md.getIndexInfo(null, null, "TABLE_NAME", false, true)); 
0

我會使用類似codesmith的東西。它是語言不可知的,可以通過數據庫創建你想要的模型。 http://www.codesmithtools.com/

在任何ORM推出之前,我用它來爲我的sqlite生成我的模型。它工作得非常好。

0

我已經爲此做了一個工具:DB Importer。它從數據庫模式生成JPA類。代碼生成通過Groovy腳本高度可配置。這個腳本中使用的Groovy語法就像Java一樣。

1

對於逆向工程,您可以使用Spring Roo/Jboss forge或Play框架。 Spring Roo最適合增量式腳手架。您可以通過使用Roo執行2條命令來生成代碼。

謝謝