整理一下Hibernate中工具的使用
来源:互联网 发布:高铁外交 知乎 编辑:程序博客网 时间:2024/05/20 03:46
Hibernate中有多种可以生成代码的方法,其中:
1)Java源文件通过XDoclet工具可以生成对象-关系映射文件
2)数据库Schema通过Middlegen工具可以生成对象-关系映射文件
3)对象-关系映射文件通过hbm2java可以生成Java源文件
4)对象-关系映射文件通过hbm2ddl可以生成数据库Schema
在很多书上发现都用到了hbm2java和Ant进行整合自动生成Java源文件,今天我也来学习学习
将HibernateTools-3.2.0.beta7/plugins/org.hibernate.eclipse_3.2.0.beta7/lib/tools下面的hiberante-tools.jar和freemarker.jar以及HibernateTools-3.2.0.beta7/plugins/org.hibernate.eclipse_3.2.0.beta7/lib/hibernate下面的hibernate3.jar拷贝到lib目录,
在E:/HBMAction建立CarDemo文件夹
在E:/HBMAction/CarDemo建立lib,src子目录以及build.xml文件
一些Hibernate3.2必须的包
+src
mydemo
Car.hbm.xml
hibernate.cfg.xml
build.xml
Car.hbm.xml的内容如下:
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="mydemo.Car" table="cars">
<meta attribute="class-description">
一辆简单的汽车
@author lisiding_1986
</meta>
<meta attribute="class-scope">public</meta>
<id name="carID" type="long" column="car_ID">
<meta attribute="scope-set">protected</meta>
<generator class="native" />
</id>
<property name="carName" type="String">
<meta attribute="field-description">汽车的名字</meta>
<meta attribute="use-in-toString">true</meta>
<column name="car_Name" sql-type="varchar(255)" not-null="true" />
</property>
<property name="carNumber" type="String">
<meta attribute="field-description">汽车的车牌号码</meta>
<meta attribute="use-in-toString">true</meta>
<column name="car_Number" sql-type="varchar(255)" not-null="true" />
</property>
<property name="carDate" type="timestamp">
<meta attribute="field-description">汽车的生产日期</meta>
<column name="car_Date" sql-type="timestamp" />
</property>
</class>
</hibernate-mapping>
这个对象-关系映射文件包含了如下简要信息:
这个Java源文件的名字叫Car,打包在mydemo包下,有四个字段carID,carName,carNumber,carDate,
这个类是public的,其中的carID字段的set方法是protected
接下来写Hibernate配置文件hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库连接设置 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">12345678</property>
<!-- JDBC连接池 -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.timeout">120</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3po.idle_test_period">120</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
<!-- SQL 方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<!-- 打开Hibernate的自动Session上下文管理 -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- 在命令窗口显示所有的SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 将SQL语句格式化,更方便查看 -->
<property name="hibernate.format_sql">true</property>
<!-- 在启动的时候删除数据并重新创建 -->
<property name="hbm2ddl.auto">create</property>
<!-- 指定对象-映射文件的位置 -->
<mapping resource="mydemo/Car.hbm.xml" />
</session-factory>
</hibernate-configuration>
最后就是写build.xml了
<project name="CarDemo" default="hbm2java" basedir=".">
<!-- 定义存放SQL语句和Java源文件的根目录 -->
<property name="build.dir" value="build" />
<!-- 定义将哪个目录下的jar文件做为编译或生成Java源文件时的classpath -->
<property name="build.lib" value="${basedir}/lib" />
<!-- 定义将生成的SQL语句保存到哪个目录 -->
<property name="build.ddl" value="build/ddl" />
<!-- 定义将生成的Java源文件放入哪个目录 -->
<property name="build.src" value="build/src" />
<!-- 定义一个path任务,里面有各种jar文件 -->
<path id="libs">
<!-- 将src下面的各种文件也作为classpath -->
<pathelement location="${basedir}/src" />
<!-- 将各种jar文件作为id libs引用 -->
<fileset dir="${build.lib}">
<include name="*.jar" />
</fileset>
</path>
<target name="init" description="创建一个目标,将上面定义的文件夹创建好">
<!-- 执行delete任务,先删除build文件夹
<delete dir="${build.dir}" />
-->
<!-- 执行mkdir任务,创建上面定义好的文件夹 -->
<mkdir dir="${build.dir}" />
<mkdir dir="${build.src}" />
<mkdir dir="${build.ddl}" />
</target>
<target name="copy" depends="init" description="拷贝src下的文件到build.src目录">
<copy todir="${build.src}">
<fileset dir="${basedir}/src">
<include name="**/*.properties" />
<include name="**/*.hbm.xml" />
<include name="**/*.cfg.xml" />
</fileset>
</copy>
</target>
<target name="hbm2java" depends="copy" description="利用对象-关系映射文件生成Java源文件">
<taskdef name="hbm2java"
classname="org.hibernate.tool.ant.HibernateToolTask"
classpathref="libs" />
<hbm2java destdir="${build.src}">
<configuration configurationfile="${build.src}/hibernate.cfg.xml" />
<hbm2java jdk5="true" />
</hbm2java>
</target>
<target name="hbm2ddl" depends="copy" description="利用对象-关系映射文件生成SQL语句">
<taskdef name="hbm2ddl"
classname="org.hibernate.tool.ant.HibernateToolTask"
classpathref="libs" />
<hbm2ddl destdir="${build.ddl}">
<configuration configurationfile="${build.src}/hibernate.cfg.xml" />
<hbm2ddl export="true"
console="false"
create="true"
update="false"
drop="false"
outputfilename="car.sql" />
</hbm2ddl>
</target>
<!-- 将建立的目录删除 -->
<target name="clean">
<delete dir="${build.dir}" />
</target>
</project>
将CMD窗口的命令提示符转到E:/HBMAction/CarDemo,运行ant hbm2java,
可以看到在E:/HBMAction/CarDemo/build/src/mydemo文件夹中生成了Car.java,内容如下:
// Generated 2007-12-6 16:30:26 by Hibernate Tools 3.2.0.beta7
import java.util.Date;
/** *//**
* 一辆简单的汽车
* @author lisiding_1986
*
*/
public class Car implements java.io.Serializable ...{
// Fields
private long carID;
/** *//**
* 汽车的名字
*/
private String carName;
/** *//**
* 汽车的车牌号码
*/
private String carNumber;
/** *//**
* 汽车的生产日期
*/
private Date carDate;
// Constructors
/** *//** default constructor */
public Car() ...{
}
/** *//** minimal constructor */
public Car(String carName, String carNumber) ...{
this.carName = carName;
this.carNumber = carNumber;
}
/** *//** full constructor */
public Car(String carName, String carNumber, Date carDate) ...{
this.carName = carName;
this.carNumber = carNumber;
this.carDate = carDate;
}
// Property accessors
public long getCarID() ...{
return this.carID;
}
protected void setCarID(long carID) ...{
this.carID = carID;
}
/** *//**
* * 汽车的名字
*/
public String getCarName() ...{
return this.carName;
}
public void setCarName(String carName) ...{
this.carName = carName;
}
/** *//**
* * 汽车的车牌号码
*/
public String getCarNumber() ...{
return this.carNumber;
}
public void setCarNumber(String carNumber) ...{
this.carNumber = carNumber;
}
/** *//**
* * 汽车的生产日期
*/
public Date getCarDate() ...{
return this.carDate;
}
public void setCarDate(Date carDate) ...{
this.carDate = carDate;
}
}
说句实话,第一次搞这东西真不容易,在网上找了很多资料,经过长达4个多小时的调试终于生成成功,激动中......
下面运行ant hbm2ddl,果然不出我所料,又是一大堆异常,我找了一下异常信息,如下:
[hbm2ddl] org.hibernate.MappingException: Could not determine type for: String
, for columns: [org.hibernate.mapping.Column(car_Name)]
经过10分钟左右后的调试,终于成功生成SQL语句,如下:
car_ID bigint not null auto_increment,
car_Name varchar(255) not null,
car_Number varchar(255) not null,
car_Date timestamp, primary key (car_ID)
) type=InnoDB;
总结,刚刚接触一个新东西的时候肯定会遇到各种各样的问题,但是只要不放弃,我相信终究会成功
- 整理一下Hibernate中工具的使用
- 整理一下最近的收获,java中接口的使用
- 整理一下近期项目中使用过的sql技巧
- Linux中整理代码工具indent的使用
- 整理一下最近学习使用的一些IT工具,老的新的都有之一基本篇
- 最近整理了一下使用VC++编译器过程中
- 整理一下今天的收获(getSharePreferences的使用,解决在非onCreate方法中无法使用的情况)
- Hibernate中Criteria的完整用法【整理】
- Hibernate中Criteria的完整用法【整理】
- 整理一下GRE考试中作文的复习备考要点
- 最近希望能够整理一下关于CVS的使用
- 整理一下各保险公司所使用的业务系统
- apk的反编译,第一次使用apktool,整理一下整个流程
- 记录一下:Hibernate配置文件中数据库字段的对应类型
- Android开发中常用的工具整理
- android 開發常用的工具整理(整理中)
- 分享一下我使用的一些工具(未完成)
- 整理一下XSLT的优缺点
- 12.3 串行通信与重叠I/O
- qt4:英文字符的比较问题
- keytool - 密钥和证书管理工具
- Asp.Net2.0学习笔记(六):Asp.Net2.0的数据绑定
- java Native Method初涉
- 整理一下Hibernate中工具的使用
- Apache Server = A Patchy Server
- 程序员修炼之道 读书笔记 1
- C++ STL简介
- 常用linux网站介绍
- qt4:用eclipse开发qt应用程序
- 枚举当前系统进程
- Discuz!NT控件剖析 之 Tab 属性页 [原创: 附源码]
- java网络编程(5)