原文鏈接:Hibernate配置文件
通過配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(.hbm.xml)把java對象或持久化對象(Persistent Object,PO)映射到數據庫中的數據表,
然後通過操作PO,對數據表中的數據進行增,刪,改,查等操作.
Hibernate配置文件主要用來配置數據庫連接參數,例如數據庫的驅動程序URL,用戶名,密碼等。
兩種格式:hibernate.properties和hibernate.cfg.xml。
一般情況下,hibernate.cfg.xml是Hibernate的默認配置文件。
(1) hibernate.properties:
在Hibernate-3.1的etc目錄下有一個hibernate.properties模板。該配置模板文件定義了連接各種數據庫所需要的參數。需要使用hibernate.properties時,修改該模板即可。該模板文件中每一個配置項前面的“#”是註釋符號。
(2)hibernate.cfg.xml:
除了要定義Hibernate的各項屬性,還要定義程序中用的映射文件(xxx.hbm.xml)。一般情況下是hibernate的默認配置文件。
hibernate.cfg.xml配置文件
<?xmlversion='1.0'encoding='UTF-8'?>
<!DOCTYPEhibernate-configurationPUBLIC
"-//Hibernate/HibernateConfiguration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<propertyname="connection.username">sa</property>
<propertyname="connection.url">
jdbc:sqlserver://localhost:1433;databaseName=hbDB
</property>
<propertyname="dialect">
org.hibernate.dialect.SQLServerDialect
</property>
<propertyname="myeclipse.connection.profile">hbDB</property>
<propertyname="connection.password">sa</property>
<propertyname="connection.driver_class">
com.microsoft.sqlserver.jdbc.SQLServerDriver
</property>
<propertyname="show_sql">true</property>
<property key="hibernate.connection.autocommit">false</property>
<mappingresource="cn/Customers.hbm.xml"/>
</session-factory>
</hibernate-configuration>
hibernate.cfg.xml配置文件屬性
屬性 | 說明 |
connection.username | 指定連接數據庫的用戶名 |
connection.url | 指定連接數據庫的URL |
dialect | 用於配置hibernate使用的不同的數據類型。如Oracle、DB2、MS SQL Server、MySQL等。 |
myeclipse.connection.profile | 數據庫的配置文件 |
connection.password | 指定連接數據庫的密碼 |
connection.driver_class | 指定數據庫的驅動程序 |
show_sql | 若爲true,表示程序在運行時,在控制檯輸出SQL語句。 |
mapping | 數據庫表和實體的映射信息要在另外的映射文件中定義,但要在配置文件中聲明。 |
實體類
Customers實體類要實現implemetns java.io.Serializable接口。
packagecn;
publicclassCustomersimplementsjava.io.Serializable {
privateIntegerid;
privateStringname;
privateIntegerage;
publicInteger getAge() {
returnage;
}
publicvoidsetAge(Integer age) {
this.age= age;
}
publicInteger getId() {
returnid;
}
publicvoidsetId(Integer id) {
this.id= id;
}
publicString getName() {
returnname;
}
publicvoidsetName(String name) {
this.name= name;
}
}
映射文件
另外,還要告訴Hibernate實體類Customers映射到數據庫的哪個表,以及哪個屬性對應數據庫中的哪個字段。
Customers.hbm.xml
<?xmlversion="1.0"encoding="utf-8"?>
<!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mappingfile autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<classname="cn.Customers"table="Customers"schema="dbo"catalog="hbDB">
<idname="id"type="java.lang.Integer">
<columnname="ID"/>
<generatorclass="identity"/>
</id>
<propertyname="name"type="java.lang.String">
<columnname="Name"length="20"not-null="true"/>
</property>
<propertyname="age"type="java.lang.Integer">
<columnname="Age"not-null="true"/>
</property>
</class>
</hibernate-mapping>
1<classname="cn.Customers"table="Customers"schema="dbo"catalog="hbDB"通信dynamic-update="false"dynamic-insert="false"mutable="true"></class>
每一個<class>節點配置一個實體類的映射信息。
(1)name屬性:對應指定持久化實體類:Customers。
(2)table屬性:對應數據庫表的名字。
(3)schema屬性:
(4)catalog屬性:
(5)dynamic-update:若爲false,表示當保存一個實例時,會動態生成update語句,只有該實例中的字段取值變化,纔會把它包含到insert語句中。默認值爲true。
(6)dynamic-insert:若爲false,表示當插入一個實例時,會動態生成inset語句,只有該實例中的字段取值不爲null時,纔會把它包含到insert語句中。默認值爲true。
(7)mutable:若爲false,等價於所有的<property>元素的update屬性爲false,表示整個實例不能被更新。默認爲true。
2<idname="id"type="java.lang.Integer">
<columnname="ID"/>
<generatorclass="identity"/>
</id>
<id>節點用於定義實體的標識屬性(對應數據庫表的主鍵)
(1)name屬性:對應實體類的屬性。
(2)type屬性:指定hibernate映射的數據類型。對應Java數據類型。
(3)column屬性:通過name屬性指定其對應的數據庫表的主鍵。
(4)generator屬性:指定主鍵的生成策略。
3<propertyname="name"type="java.lang.String"update="true"insert="true">
<columnname="Name"length="20"not-null="true"/>
</property>
與<id>節點類似,但不能包括<generator>節點。
(1)name屬性:指定持久化類的屬性。
(2)type屬性:指定hibernate映射的數據類型。對應Java數據類型。
(3)column屬性:通過name屬性指定其對應的數據庫表的字段名。
(4)length屬性:通過name屬性指定其對應的數據庫表的字段名的長度。
(5)not-null屬性:通過name屬性指定其對應的數據庫表的字段名是否爲空。
(6)update:若爲false則在更新數據時,不會更新該字段。默認爲true.即更新。
(7)insert:若爲false則在插入數據時,不會插入該字段。默認爲true.即插入。
<column>元素的屬性
屬性 | 說 明 |
Name | 指定持久化類的屬性。 |
length | 指定段長度 |
not-null | 指明字段是否爲空。默認爲false。 |
unique | 指明字段是否具有唯一索引。默認爲false。 |
unique-key | 爲多個字段設定惟一約束 |
foreign-key | 指明一個外鍵的名字,它是爲關聯生成的。 |
sql-type | 設定字段的SQL類型。 |
check | 設定SQL檢查約束。 |
在做唯一外鍵關聯的時候都要用到property-ref="readTypeName"
在many-to-one加個屬性,這個屬性默認是指向主鍵的,把它改爲主表的關聯字段