在
Java
应用中使用
Hibernate
包含以下步骤:
1.
创建
Hibernate
的配置文件。
2.
创建持久化类。
3.
创建对象
-
关系映射文件。
4.
通过
Hibernate API
编写访问数据库的代码。
一、创建
Hibernate
的配置文件
两种方式:
XML
格式
& Java
属性文件
--
:“键
=
值”形式。
以下为
Java
属性方式的示范,这种配置文件的默认文件名为:
hibernate.properties
hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.driver_name=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/SAMPLEDS
hibernate.connection.username=root
hibernate.connection.password=1234
hibernate.show_sql=true
hibernate.connection.driver_name=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/SAMPLEDS
hibernate.connection.username=root
hibernate.connection.password=1234
hibernate.show_sql=true
二、创建持久化类
持久化类通常都是域模型中的实体域类。符合
JavaBean
的规范。
PS
:
1. Hibernate
并不要求持久化类必须实现
java.io.Serializable
接口;
2. 一般而言,持久化类有一个 id 属性,用来惟一标识类的每个对象。在面向对象术语中,这个属性被称为对象标识符 (OID , Object Identifier) ;
3. Hibernate 要求持久化类必须提供一个不带参数的默认构造方法,在程序运行时, Hibernate 运用 Java 反射机制,调用 java.lang.reflect.Constructor.newInstance() 方法来构造持久化类的实例。
4. 持久化类的默认构造方法的访问级别必须是 public 或 protected 类型。不能为 default 或 private 类型
2. 一般而言,持久化类有一个 id 属性,用来惟一标识类的每个对象。在面向对象术语中,这个属性被称为对象标识符 (OID , Object Identifier) ;
3. Hibernate 要求持久化类必须提供一个不带参数的默认构造方法,在程序运行时, Hibernate 运用 Java 反射机制,调用 java.lang.reflect.Constructor.newInstance() 方法来构造持久化类的实例。
4. 持久化类的默认构造方法的访问级别必须是 public 或 protected 类型。不能为 default 或 private 类型
三、创建数据库
四、创建对象
-
关系映射文件
Hibernate 采用 XML 格式的文件来指定对象和关系数据之间的映射 。在运行时, Hibernate 将根据这个映射文件来生成各种 SQL 语句。
hbm.xml 文件应把它入在映射 class 类同一个目录下。
Hibernate 采用 XML 格式的文件来指定对象和关系数据之间的映射 。在运行时, Hibernate 将根据这个映射文件来生成各种 SQL 语句。
hbm.xml 文件应把它入在映射 class 类同一个目录下。
1.
映射文件的文档类型定义
(DTD
,
Document Type Definition)
<!ELEMENT hibernate-mapping(
meta*,
import*,
(class|subclasss|joined-subclass)*,
query*,
sql-query*)>
<!ELEMENT class(
meta*,
(cache|jcs-chche)?,
(id|composite-id),
discriminator?,
(version|timestamp)?
(property|many-to-one|one-to-one|component|dynamic-component|any|map|list| bag|idbag|array|primitive-array)*,
((subclass*)|(joined-subclass*))
)>
<hibernate-mapping> 元素是对象 - 关系映射文件的根元素,其他元素必须嵌入在该元素内。
PS :
<!ELEMENT hibernate-mapping(
meta*,
import*,
(class|subclasss|joined-subclass)*,
query*,
sql-query*)>
<!ELEMENT class(
meta*,
(cache|jcs-chche)?,
(id|composite-id),
discriminator?,
(version|timestamp)?
(property|many-to-one|one-to-one|component|dynamic-component|any|map|list| bag|idbag|array|primitive-array)*,
((subclass*)|(joined-subclass*))
)>
<hibernate-mapping> 元素是对象 - 关系映射文件的根元素,其他元素必须嵌入在该元素内。
PS :
符号
|
含义
|
无符号
|
该元素在父元素内必须存在且只能存在一次
|
+
|
该元素在父元素内必须存在,可以存在一次或者多次
|
*
|
该元素在父元素内可以不存在,或者存在一次或者多次
|
?
|
该元素在父元素内可以不存在,或者只存在一次
|
在映射文件中,父元素中的各种子元素的定义必须符合特定的顺序。
必须先定义 <id> 子元素,再定义 <property> 子元素
把
Customer
持久化类映射到
CUSTOMERS
表
必须先定义 <id> 子元素,再定义 <property> 子元素
例程的 Customer.hbm.xml 文件用于映射 Customer 类。如果需要映射多个持久化类,那么既可以在同一个映射文件中映射所有的类,也可以为每个类创建单独的映射文件,映射文件和类同名,扩展名为“ hbm.xml ”。 后一种做法更值得推荐,因为在团队开发中,这有利于管理和维护映射文件。
<class> 元素指定类和表的映射,它的 name 属性设定类名, table 属性设定表名。以下代码表明和 Customer 类对应的表为 CUSTOMERS 表:
<class name=”mypack.Customer” table=”CUSTOMERS”>
如果没有设置 <class> 元素的 table 属性, Hibernate 将直接以类名作为表名,也就是说在默认情况下,与 mypack.Customer 类对应的表为 Customer 表。
<id> 子元素设定持久化类的 OID 和表的主键的映射。
例: <id name=”id” column=”ID” type=”long”>
<generator class=”increment” /> // generator 子元素指定对象标识符生成器
</id>
<property> 子元素主要包括 name,type,column 和 not-null 属性。
name :持久化类的属性的名字; type :指定 Hibernate 映射类型。