我曾经使用Netbeans向导(版本6.7.1)从数据库生成实体类,现在我想寻找一个独立的工具(脚本、命令行工具...)来完成同样的任务,因为我团队中的一些开发人员使用Eclipse而不是Netbeans,或者Netbeans的版本不同(即6.9.1或7.0...),这些IDE以不同的方式生成实体类。到目前为止,我还没有找到这样的独立工具。也许我错过了什么。如果你知道一个,请告诉我。我非常感谢。
svdrlsy41#
您可以使用CLI(命令行界面)版本的Telosys代码生成器参见https://www.telosys.org/cli.html文件:https://doc.telosys.org/此工具可与任何类型的IDE结合使用
bbmckpt72#
我发现自己也遇到了类似的情况,在四处寻找了相当长的一段时间后,我发现从命令行支持此功能的唯一工具是Apache OpenJPA。要让它工作需要一点配置,但它似乎完成了这项工作。它的工作原理如下:1.使用Schema Tool从现有的DB模式创建一个.xml文件。1.根据您的喜好编辑生成的xml(我通过Gradle任务运行整个过程,因此我使用Groovy从模式中删除了一些不需要的表)1.使用反向Map工具从.xml生成JPA实体类(抱歉,我没有足够的信誉来发布超过2个链接)。此工具还可以接受一个可选的定制器类,您可以使用它来进一步定制生成的代码。尽管这些工具的文档说明在类路径上有一个properties.xml文件就足以使它们工作,但对我来说,只有当我显式地将它们指向一个带有'-properties'参数的文件时,它们才能工作。这里有一些代码片段,可以保存读者阅读本文的时间。这是用OpenJPA 2.3.0测试过的:
生成模式xml(在我的例子中是从MSSQL DB生成的,因此驱动程序位于类路径中):
java -cp openjpa-all-2.3.0.jar;sqljdbc4.jar org.apache.openjpa.jdbc.schema.SchemaTool -properties openjpa.xml -action reflect -file schema.xml
从xml生成实体:
java -cp openjpa-all-2.3.0.jar org.apache.openjpa.jdbc.meta.ReverseMappingTool -properties openjpa.xml -metadata none -annotations true -nullableAsObject true -useGenericCollections true -pkg {your package} -directory {output directory} schema.xml
示例openjpa.xml(同样,对于MSSQL数据库):
<?xml version="1.0"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"> <persistence-unit name="Gaya STG"> <properties> <property name="openjpa.ConnectionURL" value="jdbc:sqlserver://{ip}"/> <property name="openjpa.ConnectionDriverName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/> <property name="openjpa.ConnectionUserName" value="{username}"/> <property name="openjpa.ConnectionPassword" value="{pass}"/> <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/> </properties> </persistence-unit> </persistence>
包含上述所有任务的示例build.gradle文件(同样适用于MSSQL DB):
import java.util.regex.Pattern apply plugin: 'java' dependencies { compile "org.apache.openjpa:openjpa-all:2.3.0" compile "sqljdbc4:sqljdbc4:sqljdbc4" } task cleanSchemaXml(type: Delete) { delete file("schema.xml") } task generateSchemaXml(type: JavaExec, dependsOn: cleanSchemaXml) { classpath = configurations.compile main = "org.apache.openjpa.jdbc.schema.SchemaTool" args "-properties", getPropertiesFile(), "-action", "reflect", "-file", "schema.xml" doFirst { println "Generating schema.xml..." } doLast { println "Done generating schema.xml." println "Updating schema.xml..." updateSchema() println "Done updating schema.xml." } } task cleanEntities(type: Delete) { delete fileTree(dir: "{path/to/your/entities}") } task generateEntities(type: JavaExec, dependsOn: [cleanEntities, clean, generateSchemaXml, jar]) { classpath = files(configurations.compile, jar.archivePath) // Add this module's jar to the executed classpath, so we can use the EntityCustomizer (which is assumed to be in this module). main = "org.apache.openjpa.jdbc.meta.ReverseMappingTool" args "-metadata", "none", "-annotations", "true", "-nullableAsObject", "true", "-useGenericCollections", "true", "-properties", getPropertiesFile(), // "-customizerClass", "{path.to.your.EntityCustomizer}", "-directory", "{path/to/your/entities}", "-pkg", "{your.entity.package}", "schema.xml" doFirst { println "Generating entity classes from schema.xml..." } doLast { println "Done generating entity classes." } } private String getPropertiesFile() { // File is read directly from the file-system, will not work from a Jar. return file("src/main/resources/openjpa.xml").getAbsolutePath() } private void updateSchema() { // Only this schema will be kept. final def schemasToKeep = ['dbo'] // These tables will be removed from the .xml final def tablesToRemove = [ 'ReplicationMonitor', 'DDLEvents', 'AuditTrail', 'AuditTrailErrorLog', 'sysdiagrams', 'table_relations', 'tasks_queue', 'tasks_queue_archive', '.*history' // Remove all tables ending with 'history'. ].collect { Pattern.compile(it) } final File xmlFile = file('schema.xml') // Read xml. final def xml = new XmlParser().parse(xmlFile) // Remove all unnecessary schemas. filterSchemas(xml, schemasToKeep) // Remove all unnecessary tables. filterTables(xml, tablesToRemove) // Save updated xml file. new XmlNodePrinter(new PrintWriter(new FileWriter(xmlFile))).print(xml) } private void filterSchemas(Node xml, List<String> schemasToKeep) { final List<Node> removedSchemas = [] xml.each { schema -> final String name = schema.@name if (!schemasToKeep.contains(name)) { println("Removing schema: $name") removedSchemas += schema } } removedSchemas.each { xml.remove(it) } } private void filterTables(Node xml, List<Pattern> tablesToRemove) { xml.each { schema -> final List<Node> removedTables = [] schema.each { table -> final String name = table.@name if (tablesToRemove.any { it.matcher(name).matches() }) { println("Removing table: $name") removedTables += table } } removedTables.each { schema.remove(it) } } }
aurhwmvo3#
对于Eclipse用户,您应该使用Eclipse插件,如“Telosys工具”(http://marketplace.eclipse.org/content/telosys-tools)它能满足你的需求:连接到数据库,检索模式并生成任何类型的源文件(如JPA实体)。请参阅教程:https://sites.google.com/site/telosystutorial/JPA模板如下:https://github.com/telosys-tools/persistence-jpa-TT210-R2
cclgggtu4#
试试Hibernate的hbm2ddl:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html查找hibernate.hbm2ddl.auto参数,它有一个create选项。
hibernate.hbm2ddl.auto
4条答案
按热度按时间svdrlsy41#
您可以使用CLI(命令行界面)版本的Telosys代码生成器
参见https://www.telosys.org/cli.html
文件:https://doc.telosys.org/
此工具可与任何类型的IDE结合使用
bbmckpt72#
我发现自己也遇到了类似的情况,在四处寻找了相当长的一段时间后,我发现从命令行支持此功能的唯一工具是Apache OpenJPA。
要让它工作需要一点配置,但它似乎完成了这项工作。它的工作原理如下:
1.使用Schema Tool从现有的DB模式创建一个.xml文件。
1.根据您的喜好编辑生成的xml(我通过Gradle任务运行整个过程,因此我使用Groovy从模式中删除了一些不需要的表)
1.使用反向Map工具从.xml生成JPA实体类(抱歉,我没有足够的信誉来发布超过2个链接)。此工具还可以接受一个可选的定制器类,您可以使用它来进一步定制生成的代码。
尽管这些工具的文档说明在类路径上有一个properties.xml文件就足以使它们工作,但对我来说,只有当我显式地将它们指向一个带有'-properties'参数的文件时,它们才能工作。
这里有一些代码片段,可以保存读者阅读本文的时间。这是用OpenJPA 2.3.0测试过的:
生成模式xml(在我的例子中是从MSSQL DB生成的,因此驱动程序位于类路径中):
从xml生成实体:
示例openjpa.xml(同样,对于MSSQL数据库):
包含上述所有任务的示例build.gradle文件(同样适用于MSSQL DB):
aurhwmvo3#
对于Eclipse用户,您应该使用Eclipse插件,如“Telosys工具”(http://marketplace.eclipse.org/content/telosys-tools)
它能满足你的需求:连接到数据库,检索模式并生成任何类型的源文件(如JPA实体)。请参阅教程:https://sites.google.com/site/telosystutorial/
JPA模板如下:https://github.com/telosys-tools/persistence-jpa-TT210-R2
cclgggtu4#
试试Hibernate的hbm2ddl:
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html
查找
hibernate.hbm2ddl.auto
参数,它有一个create选项。