hibernate tool 教下新手
顺便研究了下hibernatetool 发现已经到了4.0beta,我用的是3.2的没有解决oracle的注释问题,4.0已经解决了
源代码获取
http://anonsvn.jboss.org/repos/jbosstools/tags/
找一个你适合的分支
用svn工具下载下来
我用maven2创建了一个项目
添加了如下依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>ling2.parent</artifactId> <groupId>com.ling</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.ling</groupId> <artifactId>ling2.autoproject</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-tools</artifactId> <version>4.0.0-CR1</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.eclipse.equinox</groupId> <artifactId>registry</artifactId> <version>3.3.0-v20070522</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.eclipse.core</groupId> <artifactId>jobs</artifactId> <version>3.3.0-v20070423</version> <type>jar</type> <scope>compile</scope> </dependency> </dependencies> </project>
parent的依赖是我的公共依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ling</groupId> <artifactId>ling2.parent</artifactId> <packaging>pom</packaging> <version>0.0.1-SNAPSHOT</version> <modules> <module>ling2.core</module> <module>ling2.core.d5</module> <module>ling2.projecttemplate</module> <module>ling2.autoproject</module> </modules> <build> <defaultGoal>compile</defaultGoal> <finalName>ling2.core</finalName> <sourceDirectory>src/main/java</sourceDirectory> <resources> <!-- 控制资源文件的拷贝 --> <resource> <directory>src/main/resources</directory> <targetPath>${project.build.directory}</targetPath> </resource> </resources> <plugins> <!-- 设置源文件编码方式 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <defaultLibBundleDir>lib</defaultLibBundleDir> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>.....MonitorMain</mainClass> </manifest> </archive> </configuration> </plugin> <!-- 拷贝依赖的jar包到lib目录 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory> ${project.build.directory}/lib </outputDirectory> </configuration> </execution> </executions> </plugin> <!-- 解决资源文件的编码问题 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.3</version> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- 打包source文件为jar文件 --> <plugin> <artifactId>maven-source-plugin</artifactId> <version>2.1</version> <configuration> <attach>true</attach> <encoding>UTF-8</encoding> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <repositories> <repository> <id>bsdn-maven-repository</id> <url>http://nexus.bsdn.org/content/groups/public/</url> </repository> </repositories> <dependencies> <dependency> <artifactId>spring-orm</artifactId> <groupId>org.springframework</groupId> <version>3.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>3.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>3.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>3.2.1.RELEASE</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>com.bstek.dorado</groupId> <artifactId>dorado-core</artifactId> <version>7.2.4</version> <exclusions> <exclusion> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </exclusion> <exclusion> <artifactId>spring-context</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>spring-aop</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>spring-core</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>spring-expression</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>spring-beans</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>spring-context-support</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>spring-web</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>spring-webmvc</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>javassist</artifactId> <groupId>javassist</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.1</version> </dependency> <dependency> <groupId>jexcelapi</groupId> <artifactId>jxl</artifactId> <version>2.6</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.2.1.Final</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>ognl</groupId> <artifactId>ognl</artifactId> <version>3.0.6</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>3.2.2.RELEASE</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>3.1.4.RELEASE</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>3.1.4.RELEASE</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>3.1.3.RELEASE</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.5.4</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> <version>4.2.1.Final</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-ehcache</artifactId> <version>4.2.1.Final</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.4.3</version> <type>jar</type> <scope>compile</scope> </dependency> </dependencies> </project>
创建好的ling2.autoproject目录结构如下
运行maven命令
maven -install
相关jar包会自动放到../target/lib下
script 下的配置很重要,决定你能不能正常运行项目
我会当附件上传上去供大家借鉴
src.dir=../result
packagename=com.tplife.smp.channel.employee
决定生成的文件到那个目录,那个包下,
这些内容决定你编译需要哪些jar包和执行哪些动作
<?xml version="1.0" encoding="UTF-8"?> <project basedir="."> <property file="build.properties"> </property> <path id="toolslib"> <!--<path location="../resources/libs/hibernate-tools.jar" />--> <pathelement location="../target/classes"/> <fileset dir="../target/lib"> <include name="**/*.jar" /> </fileset> </path> <target name="hibernatecode"> <taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="toolslib" /> <!-- destdir属性可以在各输出属性中分别指定,这里是全局指定 --> <hibernatetool destdir="${src.dir}" templatepath="../src/main/java"> <!-- packagename表生成文件的存放包名 --> <jdbcconfiguration propertyfile="hibernate.properties" revengfile="hibernate.reveng.xml" packagename="${packagename}" /> <!-- 生成.java文件 --> <hbm2java jdk5="true" ejb3="true"/> <hbm2hbmxml/> <!--<hbm2idao /> <hbm2daoimpl /> <hbm2iservice /> <hbm2serviceimpl /> <hbm2view /> <hbm2viewmanager /> <hbm2viewjsp />--> </hibernatetool> </target> <target name="schemaexport"> <taskdef name="schemaexport" classname="org.hibernate.tool.hbm2ddl.SchemaExportTask" classpathref="toolslib" /> <schemaexport properties="hibernate.properties" quiet="no" text="no" drop="no" delimiter=";" output="schema-export.sql"> <fileset dir="${src.dir}"> <include name="**/*.hbm.xml" /> </fileset> </schemaexport> </target> <target name="schemaupdate"> <taskdef name="schemaupdate" classname="org.hibernate.tool.hbm2ddl.SchemaUpdateTask" classpathref="toolslib" /> <schemaupdate properties="hibernate.properties" quiet="no"> <fileset dir="${src.dir}"> <include name="**/*.hbm.xml" /> </fileset> </schemaupdate> </target> <target name="schemavalidate"> <taskdef name="schemavalidator" classname="org.hibernate.tool.hbm2ddl.SchemaValidatorTask" classpathref="toolslib" /> <schemavalidator properties="hibernate.properties"> <fileset dir="${src.dir}"> <include name="**/*.hbm.xml" /> </fileset> </schemavalidator> </target> </project>
这些配置决定你的数据源配置
#hibernate.connection.driver_class=com.mysql.jdbc.Driver
#hibernate.connection.url=jdbc:mysql://localhost:3306/zhonghong?useUnicode=true&characterEncoding=utf8
#hibernate.connection.username=root
#hibernate.connection.password=2009
#hibernate.dialect=org.hibernate.dialect.MySQLDialect
#hibernatetool.metadatadialect=org.hibernate.cfg.reveng.dialect.MySQLMetaDataDialect
hibernatetool.metadatadialect=org.hibernate.cfg.reveng.dialect.OracleMetaDataDialect
#If neither MySQL nor Oracle,please try below
#hibernatetool.metadatadialect=org.hibernate.cfg.reveng.dialect.JDBCMetaDataDialect
hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver
hibernate.connection.url=jdbc:oracle:thin:@localhost:1521:orclwin7
#hibernate.connection.url=jdbc:oracle:thin:@10.1.105.1:1521:ram
hibernate.connection.username=train
hibernate.connection.password=train
hibernate.dialect=org.hibernate.dialect.Oracle9iDialect
这些配置决定你要生成什么表
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd" > <hibernate-reverse-engineering> <type-mapping> <sql-type jdbc-type="NUMERIC" precision="15" hibernate-type="big_decimal"/> <sql-type jdbc-type="NUMERIC" not-null="true" hibernate-type="long" /> <sql-type jdbc-type="NUMERIC" not-null="false" hibernate-type="java.lang.Long" /> <sql-type jdbc-type="VARCHAR" length="1" hibernate-type="yes_no" /> <sql-type jdbc-type="CHAR" length="1" hibernate-type="java.lang.String" /> <sql-type jdbc-type="VARCHAR" hibernate-type="java.lang.String" /> <sql-type jdbc-type="TIMESTAMP" length="6" hibernate-type="java.util.Date" /> <!-- mysql --> <sql-type jdbc-type="SMALLINT" hibernate-type="java.lang.Integer" /> <sql-type jdbc-type="INTEGER" length="1" hibernate-type="yes_no" /> <sql-type jdbc-type="BIGINT" hibernate-type="java.lang.Long" /> </type-mapping> <table-filter match-name="TBL_FILE"></table-filter> <table-filter match-schema=".*" match-name="SS_.*"/> <table-filter match-schema=".*" match-name=".*" exclude="true"/> --> </hibernate-reverse-engineering>按如下方式执行生成代码
然后你就可以在这个基础上编写自己的内容了,比如我的dorado5模板
<hbm2idao />
<hbm2daoimpl />
<hbm2iservice />
<hbm2serviceimpl />
<hbm2view />
<hbm2viewmanager />
<hbm2viewjsp />
顺序是
HibernateToolTask中注册你自定义的新模板
这里的方法命名决定你
<hbm2idao />
<hbm2daoimpl />
<hbm2iservice />
<hbm2serviceimpl />
<hbm2view />
<hbm2viewmanager />
<hbm2viewjsp />
public ExporterTask createHbm2DAO(){ ExporterTask generator= new Hbm2DAOExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbm2IDAO(){ ExporterTask generator= new Hbm2IDAOExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbm2DAOImpl(){ ExporterTask generator= new Hbm2DAOImplExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbm2IService(){ ExporterTask generator= new Hbm2IServiceExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbm2ServiceImpl(){ ExporterTask generator= new Hbm2ServiceImplExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbm2View(){ ExporterTask generator= new Hbm2ViewExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbm2ViewManager(){ ExporterTask generator= new Hbm2ViewTemplateExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbm2ViewJsp(){ ExporterTask generator= new Hbm2ViewJspExporterTask(this); addGenerator( generator ); return generator; }以下以Hbm2ViewJsp为例子说明
/* * Created on 13-Feb-2005 * */ package org.hibernate.tool.ant; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Properties; import org.apache.tools.ant.AntClassLoader; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; import org.apache.tools.ant.types.Environment; import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.PropertySet; import org.hibernate.MappingException; import org.hibernate.MappingNotFoundException; import org.hibernate.cfg.Configuration; import org.hibernate.util.StringHelper; /** * @author max * */ public class HibernateToolTask extends Task { ConfigurationTask configurationTask; private File destDir; private List generators = new ArrayList(); private Path classPath; private Path templatePath; private Properties properties = new Properties(); private void checkConfiguration() { if(configurationTask!=null) { throw new BuildException("Only a single configuration is allowed."); } } public ConfigurationTask createConfiguration() { checkConfiguration(); configurationTask = new ConfigurationTask(); return configurationTask; } public JDBCConfigurationTask createJDBCConfiguration() { checkConfiguration(); configurationTask = new JDBCConfigurationTask(); return (JDBCConfigurationTask) configurationTask; } public AnnotationConfigurationTask createAnnotationConfiguration() { checkConfiguration(); configurationTask = new AnnotationConfigurationTask(); return (AnnotationConfigurationTask) configurationTask; } public JPAConfigurationTask createEjb3Configuration() { log( "<ejb3configuration> is deprecated. Use <jpaconfiguration> instead.", Project.MSG_WARN); checkConfiguration(); configurationTask = new JPAConfigurationTask(); return (JPAConfigurationTask) configurationTask; } public JPAConfigurationTask createJpaConfiguration() { checkConfiguration(); configurationTask = new JPAConfigurationTask(); return (JPAConfigurationTask) configurationTask; } public ExporterTask createHbm2DDL() { ExporterTask generator = new Hbm2DDLExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbmTemplate() { ExporterTask generator = new GenericExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbm2CfgXml() { ExporterTask generator = new Hbm2CfgXmlExporterTask(this); addGenerator( generator ); return generator; } protected boolean addGenerator(ExporterTask generator) { return generators.add(generator); } public ExporterTask createHbm2Java() { ExporterTask generator = new Hbm2JavaExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbm2HbmXml() { ExporterTask generator= new Hbm2HbmXmlExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbm2Doc() { ExporterTask generator= new Hbm2DocExporterTask(this); addGenerator( generator ); return generator; } /*public ExporterTask createHbm2Jsf(){ ExporterTask generator= new Hbm2JsfGeneratorTask(this); generators.add(generator); return generator; }*/ public ExporterTask createHbm2DAO(){ ExporterTask generator= new Hbm2DAOExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbm2IDAO(){ ExporterTask generator= new Hbm2IDAOExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbm2DAOImpl(){ ExporterTask generator= new Hbm2DAOImplExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbm2IService(){ ExporterTask generator= new Hbm2IServiceExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbm2ServiceImpl(){ ExporterTask generator= new Hbm2ServiceImplExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbm2View(){ ExporterTask generator= new Hbm2ViewExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbm2ViewManager(){ ExporterTask generator= new Hbm2ViewTemplateExporterTask(this); addGenerator( generator ); return generator; } public ExporterTask createHbm2ViewJsp(){ ExporterTask generator= new Hbm2ViewJspExporterTask(this); addGenerator( generator ); return generator; } public QueryExporterTask createQuery() { QueryExporterTask generator = new QueryExporterTask(this); generators.add(generator); return generator; } public HbmLintExporterTask createHbmLint() { HbmLintExporterTask generator = new HbmLintExporterTask(this); generators.add(generator); return generator; } /** * Set the classpath to be used when running the Java class * * @param s an Ant Path object containing the classpath. */ public void setClasspath(Path s) { classPath = s; } /** * Adds a path to the classpath. * * @return created classpath */ public Path createClasspath() { classPath = new Path(getProject() ); return classPath; } public void execute() { if(configurationTask==null) { throw new BuildException("No configuration specified. <" + getTaskName() + "> must have one of the following: <configuration>, <jpaconfiguration>, <annotationconfiguration> or <jdbcconfiguration>"); } log("Executing Hibernate Tool with a " + configurationTask.getDescription() ); validateParameters(); Iterator iterator = generators.iterator(); AntClassLoader loader = getProject().createClassLoader(classPath); ExporterTask generatorTask = null; int count = 1; try { loader.setParent(this.getClass().getClassLoader() ); // if this is not set, classes from the taskdef cannot be found - which is crucial for e.g. annotations. loader.setThreadContextLoader(); while (iterator.hasNext() ) { generatorTask = (ExporterTask) iterator.next(); log(count++ + ". task: " + generatorTask.getName() ); generatorTask.execute(); } } catch (RuntimeException re) { reportException(re, count, generatorTask); } finally { if (loader != null) { loader.resetThreadContextLoader(); loader.cleanup(); } } } private void reportException(Throwable re, int count, ExporterTask generatorTask) { log("An exception occurred while running exporter #" + count + ":" + generatorTask.getName(), Project.MSG_ERR); log("To get the full stack trace run ant with -verbose", Project.MSG_ERR); log(re.toString(), Project.MSG_ERR); String ex = new String(); Throwable cause = re.getCause(); while(cause!=null) { ex += cause.toString() + "\n"; if(cause==cause.getCause()) { break; // we reached the top. } else { cause=cause.getCause(); } } if(StringHelper.isNotEmpty(ex)) { log(ex, Project.MSG_ERR); } String newbieMessage = getProbableSolutionOrCause(re); if(newbieMessage!=null) { log(newbieMessage); } if(re instanceof BuildException) { throw (BuildException)re; } else { throw new BuildException(re, getLocation()); } } private String getProbableSolutionOrCause(Throwable re) { if(re==null) return null; if(re instanceof MappingNotFoundException) { MappingNotFoundException mnf = (MappingNotFoundException)re; if("resource".equals(mnf.getType())) { return "A " + mnf.getType() + " located at " + mnf.getPath() + " was not found.\n" + "Check the following:\n" + "\n" + "1) Is the spelling/casing correct ?\n" + "2) Is " + mnf.getPath() + " available via the classpath ?\n" + "3) Does it actually exist ?\n"; } else { return "A " + mnf.getType() + " located at " + mnf.getPath() + " was not found.\n" + "Check the following:\n" + "\n" + "1) Is the spelling/casing correct ?\n" + "2) Do you permission to access " + mnf.getPath() + " ?\n" + "3) Does it actually exist ?\n"; } } if(re instanceof ClassNotFoundException || re instanceof NoClassDefFoundError) { return "A class were not found in the classpath of the Ant task.\n" + "Ensure that the classpath contains the classes needed for Hibernate and your code are in the classpath.\n"; } if(re instanceof UnsupportedClassVersionError) { return "You are most likely running the ant task with a JRE that is older than the JRE required to use the classes.\n" + "e.g. running with JRE 1.3 or 1.4 when using JDK 1.5 annotations is not possible.\n" + "Ensure that you are using a correct JRE."; } if(re.getCause()!=re) { return getProbableSolutionOrCause( re.getCause() ); } return null; } private void validateParameters() { if(generators.isEmpty()) { throw new BuildException("No exporters specified in <hibernatetool>. There has to be at least one specified. An exporter is e.g. <hbm2java> or <hbmtemplate>. See documentation for details.", getLocation()); } else { Iterator iterator = generators.iterator(); while (iterator.hasNext() ) { ExporterTask generatorTask = (ExporterTask) iterator.next(); generatorTask.validateParameters(); } } } /** * @return */ public File getDestDir() { return destDir; } public void setDestDir(File file) { destDir = file; } /** * @return */ public Configuration getConfiguration() { return configurationTask.getConfiguration(); } public void setTemplatePath(Path path) { templatePath = path; } public Path getTemplatePath() { if(templatePath==null) { templatePath = new Path(getProject()); // empty path } return templatePath; } public Properties getProperties() { Properties p = new Properties(); p.putAll(getConfiguration().getProperties()); p.putAll(properties); return p; } public void addConfiguredPropertySet(PropertySet ps) { properties.putAll(ps.getProperties()); } public void addConfiguredProperty(Environment.Variable property) { properties.put(property.getKey(), property.getValue()); } }
写一个继承
Hbm2ViewJspExporterTask extends Hbm2JavaExporterTask
package org.hibernate.tool.ant; import org.hibernate.tool.hbm2x.DAOExporter; import org.hibernate.tool.hbm2x.DAOImplExporter; import org.hibernate.tool.hbm2x.Exporter; import org.hibernate.tool.hbm2x.IDAOExporter; import org.hibernate.tool.hbm2x.ServiceImplExporter; import org.hibernate.tool.hbm2x.ViewExporter; import org.hibernate.tool.hbm2x.ViewJspExporter; import org.hibernate.tool.hbm2x.ViewTemplateExporter; /** * @author Dennis Byrne */ public class Hbm2ViewJspExporterTask extends Hbm2JavaExporterTask { public Hbm2ViewJspExporterTask(HibernateToolTask parent) { super(parent); } protected Exporter configureExporter(Exporter exp) { ViewJspExporter exporter = (ViewJspExporter)exp; super.configureExporter(exp); return exporter; } protected Exporter createExporter() { return new ViewJspExporter(parent.getConfiguration(), parent.getDestDir()) ; } public String getName() { return "hbm2viewjsp (Generates a set of viewjsp)"; } }
这里决定你ftl的模板的相对位置
package org.hibernate.tool.hbm2x; import java.io.File; import java.util.Map; import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2x.pojo.POJOClass; public class ViewJspExporter extends POJOExporter { private static final String DAO_DAOHOME_FTL = "dao/ViewJsp.ftl"; private String sessionFactoryName = "SessionFactory"; public ViewJspExporter() { } public ViewJspExporter(Configuration cfg, File outputdir) { super(cfg, outputdir); } protected void init() { super.init(); setTemplateName(DAO_DAOHOME_FTL); setFilePattern("{package-name}/view/jsp/{class-name}Manager.jsp"); } protected void exportComponent(Map additionalContext, POJOClass element) { // noop - we dont want components } public String getSessionFactoryName() { return sessionFactoryName; } public void setSessionFactoryName(String sessionFactoryName) { this.sessionFactoryName = sessionFactoryName; } protected void setupContext() { getProperties().put("sessionFactoryName", getSessionFactoryName()); super.setupContext(); } public String getName() { return "hbm2view"; } }
ftl模板内容
<#assign classbody> <#assign declarationName = pojo.importType(pojo.getDeclarationName())> <%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib uri="http://www.bstek.com/dorado" prefix="d"%> <html> <head> <title>管理</title> </head> <body scroll="yes"> <d:View config="${pojo.getPackageName()}.view.${declarationName}Manager"> <d:Layout type="border" height="100%"> <d:Pane position="top"> <d:Layout type="Vflow"> <d:Pane> <d:AutoForm id="frmQuery" /> </d:Pane> <d:Pane> <d:Layout type="Hflow"> <d:Pane> <d:Button id="btnQuery" /> </d:Pane> <d:Pane> <d:Button id="btnReset" /> </d:Pane> <d:Pane> <d:Button id="btnNew" /> </d:Pane> <d:Pane> <d:Button id="btnDelete" /> </d:Pane> <d:Pane> <d:Button id="buttonModify" /> </d:Pane> </d:Layout> </d:Pane> </d:Layout> </d:Pane> <d:Pane position="center"> <d:DataTable id="tblEntity" /> </d:Pane> <d:Pane position="bottom"> <d:PagePilot id="pageEntity" /> <table cellpadding="5"> <tr> <td nowrap bgcolor="#F5F7F9">数据提取模式:</td> <td bgcolor="#F5F7F9"><d:RadioGroup id="editorDataMode" /></td> <td bgcolor="#F5F7F9"><d:Button id="buttonExcel" /></td> </tr> </table> </d:Pane> </d:Layout> <d:SubWindow id="win1" width="450px" height="150px" draggable="true" resizable="true" status="hidden" showMinimizeButton="false" showMaximizeButton="false" showCloseButton="false"> <d:Layout type="border"> <d:Pane position="top"> <d:AutoForm id="frmEntity" /> </d:Pane> <d:Pane position="center" align="right"> <d:Layout type="Hflow"> <d:Pane> <d:Button id="btnSave" /> </d:Pane> <d:Pane> <d:Button id="btnCancel" /> </d:Pane> </d:Layout> </d:Pane> </d:Layout> </d:SubWindow> </d:View> </body> </html> </#assign> ${classbody}