Hibernate功能定位:
Hibernate 是对象/关系映射」(Object/Relational Mapping)的解決方案,简写为ORM,简单的說就是将Java 中的对象与实体关系,映射至关系型数据中的表格与表格之间的关系, Hibernate 提供了这个过程中自动对应转换的方案。
hbm2java是根据映射文件自动生成java源文件
hbm2ddl 是根据映射文件自动生成数据库schema
XDoclet 根据带有XDoclet的标记的java源文件生成映射文件,数据库Schema
Middlegen 根据数据库Schema自动生成映射文件,JAVA文件。
对于管理Hiberante 映射文件,现有多种策略, 如:
1一切手工编写
2 把xdoclet标记放在你的Java 类中, 让其生成相应的映射文件。
3 从SQL 模式(schema)生成Hibernate 映射文件和Java类。
4 手工编写Hibernate 映射文件, 并且从Hibernate 映射生成Java类和SQL模式。
5 基于给定的SQL 模式,手工编写Hibernate 映射文件,并利用hbm2java工具生成Java类。
JAVADOC由标签和描述组成,嵌入JAVA代码中,可以自动生成API文件。XDOCLET是JAVADOC的扩展,现已独立,为每一种应用都提供相应的标签和描述。HIBERNATE标签及描述可以自动生成映射文件,及表。
例:
生成JAVA对象类,根据需要在类中添加相应Xdoclet标签。
package test.hibernate.testxdoclet.entity;
import java.io.Serializable;
public class RegisterUser implements Serializable {
/**
*@hibernate.class
*table="sx_registeruser"
*
*/
private static final long serialVersionUID = -4795137895281634631L;
private Integer id;
private String username;
private String telephone;
private String address;
private String zipcode;
/**
*
*/
private String interests;
/**
*@hibernate.property
* column="address"
* type="string"
* length="100"
*@return
*/
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
/**
*@hibernate.id
* column="id"
* type="java.lang.Integer"
*@return
*/
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
/**
*@hibernate.property
* column="interests"
* type="string"
*@return
*/
public String getInterests() {
return interests;
}
public void setInterests(String interests) {
this.interests = interests;
}
/**
*@hibernate.property
* column="telephone"
* type="string"
*@return
*/
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
/**
*@hibernate.property
* column="username"
* type="string"
*@return
*/
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
/**
*@hibernate.property
* column="zipcode"
* type="string"
* length="6"
*@return
*/
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
}
构建build.xml. ANT通过执行build.xml根据类文件及当中相应的Xdoclet标签,配合Xdoclet应用,产生映射文件。
<?xml version="1.0" encoding="UTF-8"?>
<project name="testxdoclet" default="hibernatedoclet" basedir="."> //name可以据需要取,default表示默认target, basedir表示构建查找路径。
<property name="build.dir" value="${basedir}/src" /> // 这里的property可以理解为全局变量。引用${}
<property name="xdoclet.force" value="false" />
<path id="xdoclet.classpath"> // 这段表示告诉ANT构建时,Xdoclet的路径。id名可以按需取。dir表示目录
<fileset dir="d:/xdoclet-1.2.3/lib">
<include name="*.jar" />
</fileset>
</path>
<target name="hibernatedoclet"> //表示target名字,名字可以按需取。
<taskdef name="hibernatedoclet" //hibernate任务的描述。这段内容可以在xdoclet说明文件中找到。
classname="xdoclet.modules.hibernate.HibernateDocletTask"
classpathref="xdoclet.classpath" />
<hibernatedoclet destdir="${build.dir}" //表示最终产生的映射文件存放的目录。
force="${xdoclet.force}">
<fileset dir="${build.dir}"> //表示根据哪个.java文件(对象类)产生映射文件。
<include name="**/RegisterUser.java" />
</fileset>
<hibernate version="3.0" validateXML="3.0"/> //表示产生hbm.xml文件的设置,这里指明了版本为3.0
<hibernatecfg version="3.0" driver="com.mysql.jdbc.Driver" / /表示产生hibernate-cfx.xml的描述。
jdbcUrl="jdbc:mysql://localhost:3306/firstdb" userName="root"
password="root1" dialect="MySQLDialect">
<othermapping name="resource"
value="test/hibernate/testxdoclet/entity/RegisterUser.hbm.xml"/>
</hibernatecfg>
</hibernatedoclet>
</target>
</project>
buile.xml文件具体hibernate任务设置可以通过Xdoclet说明文件找到。