2011-03-29 60 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条命令来生成代码。

谢谢