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 <span style=”font-family: Arial, Helvetica, sans-serif;”>extends Hbm2JavaExporterTask </span>
- 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 {
- <span style=”white-space:pre”> </span>//模板相对位置
- 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}
以上内容是3.2的tool下的模板,修改过不少东西.仅供思路指导