Hibernate配置(外部配置文件方式)
阿新 • • 發佈:2017-09-24
ng- 顯示 mysq 作用 mysql 最簡 type 配置數據源 新的
配置Hibernate有2種方式,本文講的是通過外部配置文件配置的方式
Hibernate核心配置文件
1 <?xml version=‘1.0‘ encoding=‘UTF-8‘?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 5 <hibernate-configuration> 6 <session-factory> 7 <!--1.配置數據源--> 8 <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property> 9 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:mytest</property> 10 <property name="connection.username">sys</property> 11 <property name="connection.password">sys</property> 12 <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 13 <!--是否打印Hibernate生成的sql語句--> 14 <property name="show_sql">true</property> 15 <!-- 2.引入映射文件 --> 16 <!-- <mapping package="com.accp.hbm.xml"/> 批量引入 --> 17 <mapping resource="com/jazz7/hbm/xml/Users.hbm.xml" /><!--逐個引入--> 18 </session-factory> 19 </hibernate-configuration>
Hibernate核心配置文件中主要配置2個東西
1:數據源,其中各個屬性直接看單詞字面意思即可;還有Hibernate一些行為設置,比如是否顯示生成的sql語句、是否格式化sql語句之類的
2:引入Hibernate映射文件,可以批量引入以及逐個引入。映射文件一定要在這裏引入,否則是沒有任何作用的。
Hibernate映射文件
1.最簡單的配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- 1.package的值是此映射文件對應的實體類的包名 --> <hibernate-mapping package="com.jazz7.entity"> <!-- 2.配置實體類,如果實體類的名稱和數據庫中的表名稱不同的話,則這裏需要指定表名table="表名" --> <class name="Student" table="tbl_Student"> <!-- 3.指定主鍵,主鍵需要用id節點指定,和表名一樣,如果主鍵或字段名和實體類中的屬性名不同的話,可以使用column屬性指定數據庫表中的字段名稱 --> <id name="sid" > <!-- 4.指定主鍵的生成方式,sequence是以序列的方式生成,還有其他的指定方式,比如increment,自動生成--> <generator class="sequence" > <!-- 5.指定已經創建好的序列名稱 --> <param name="sequence">seq_student_id</param> </generator> </id> <!-- 6.普通屬性 --> <property name="sname" /> </class> </hibernate-mapping>
Hibernate映射文件主要是將實體類和數據庫中的表進行映射匹配,其中有2個註意點
1:定義主鍵的時候有多種生成方式,需要根據不同的數據庫來分別制定,比如oracle需要用序列,mysql需要用identity。
2:如果表名或字段名和實體類中定義的不一樣的話,需要額外在配置文件中說明。
2.多對一配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.jazz7.entity"> <class name="Emp" table="emp"> <id name="empno" column="empno"> <generator class="increment" /> </id> <property name="ename" /> <property name="job" /> <property name="mgr" /> <property name="hiredate" /> <property name="sal" /> <property name="comm" /> <!-- 多對一配置 --> <!-- 需要將實體類中相關基本類型屬性改為外鍵對應的實體類類型 --> <!-- name指的是此實體類中的對應屬性名稱 --> <!-- column指的是外鍵名稱 --> <!-- class指的是外鍵對應的實體類 --> <many-to-one name="dept" column="deptno" class="Dept" /> </class> </hibernate-mapping>
3.一對多配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.jazz7.entity"> <class name="Dept" > <id name="deptno"> <generator class="increment" /> </id> <property name="dname" /> <property name="loc" /> <!-- 一對多配置 --> <!-- cascade的意思是級聯操作,比如這裏配置了delete,那麽刪除一的一方的時候,會將此“一”關聯的所有的多的一方都刪除掉 --> <!-- inverse的意思是控制反轉,這裏配置了true,表示將控制權交給另一方,如果是false的話,則表示將控制權交給自己 --> <!-- lazy的意思是延遲加載,就是如果讀取一的一方的數據的時候是否將多的一方的數據也都讀出來 --> <set name="emps" cascade="delete" inverse="true" lazy="extra" > <!-- 配置主鍵 --> <key column="deptno" /> <!-- 配置多的一方的實體類 --> <one-to-many class="Emp" /> </set> </class> </hibernate-mapping>
4.多對多配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.jazz7.entity"> <class name="Student" table="tbl_Student"> <id name="sid" > <generator class="sequence" > <param name="sequence">seq_student_id</param> </generator> </id> <property name="sname" /> <!-- 多對多配置 --> <set name="teachers" table="tbl_teacher_student"> <key column="sid" /> <many-to-many class="Teacher" column="tid" /> </set> </class> </hibernate-mapping>
多對多這種關系比較特殊,它主要用在那種需要將關聯關系抽出來放在一個新的表中的場合。
可能說的不清楚,舉個例子吧(共享單車)。
現在有兩個表,一個是單車信息表,一個是用戶信息表。
一個單車可能被多個用戶騎過,一個用戶也可能騎過多個單車。那麽此時,主外鍵關系就不能滿足我們的需求了,我們可以創建一個新的表,“單車_用戶關聯表”,這個表中只有3個字段,分別是id,單車id,用戶id。
就是將單車和用戶的關系抽出來,放在一個新的表中。
Hibernate配置(外部配置文件方式)