我想为我们的Web框架生成自定义域类型。我们有工程部分,我们可以在其中建模域类型,然后使用JPA Annotations生成Java代码。
我认为是一种颠倒的方法,您可以在其中指定数据库模式并获取现在兼容的生成模型,反之亦然。
是否存在可以拦截生成的框架,例如Hibernate POJO generation。应该可以通过Java轻松访问表,获取列名,类型,关系,主键。剩下的就是由我来生成正确的模型。
有任何建议如何开始?
答案 0 :(得分: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));
答案 1 :(得分:1)
对于逆向工程,您可以使用Spring Roo / Jboss forge或Play框架。 Spring Roo最适合增量脚手架。您只需使用Roo执行2个命令即可生成代码。
由于
答案 2 :(得分:0)
我会使用像代码匠这样的东西。它与语言无关,可以通过数据库来创建所需的模型。 http://www.codesmithtools.com/
在任何ORM出来之前我用它来生成我的sqlite模型。它工作得非常好。
答案 3 :(得分:0)
我为此专门制作了一个工具:DB Importer。它从数据库模式生成JPA类。使用Groovy脚本可以高度配置代码生成。此脚本中使用的Groovy语法与Java类似。