生活随笔
收集整理的這篇文章主要介紹了
浅析Hibernate映射(一)——基本映射
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在說Hibernate映射之前,先下了解下面的概念。
?
對象-關系映射(Object/Relation Mapping,簡稱ORM),是隨著面向對象的軟件開發方法發展而產生的,是一種為了解決面向對象與關系數據庫存在的互不匹配的現象的技術,本質上就是將數據從一種形式轉換到另外一種形式。
?
面向對象的開發方法是當今企業級應用開發環境中的主流開發方法,關系數據庫是企業級應用環境中永久存放數據的主流數據存儲系統。對象和關系數據是業務實體的兩種表現形式,業務實體在內存中表現為對象,在數據庫中表現為關系數據。內存中的對象之間存在關聯和繼承關系,而在數據庫中,關系數據無法直接表達多對多關聯和繼承關系。因此,對象-關系映射(ORM)系統一般以中間件的形式存在,主要實現程序對象到關系數據庫數據的映射。
簡單的說,ORM是通過使用描述對象和數據庫之間映射的元數據,將java程序中的對象自動持久化到關系數據庫中
?
實現ORM的框架很多,其中當屬Hibernate最為流行,下面通過幾篇文章來看一下Hibernate是如何實現ORM的,即Hibernate的幾種映射。
?
Hibernate在實現ORM功能的時候主要用到的文件有:
??? 1、 映射類(*.java):它是描述數據庫表的結構,表中的字段在類中被描述成屬性,將來就可以實現把表中的記錄映射成為該類的對象了。
?
??? 2、映射文件(*.hbm.xml):它是指定數據庫表和映射類之間的關系,包括映射類和數據庫表的對應關系、表字段和類屬性類型的對應關系以及表字段和類屬性名稱的對應關系等。
?
??? 3、 hibernate核心配置文件(*.properties/*.cfg.xml):它指定hibernate的一些核心配置,包含與數據庫連接時需要的連接信息,比如連接哪種數據庫、登錄數據庫的用戶名、登錄密碼以及連接字符串等。映射文件的地址信息也放在這里
?
?
基本映射:
java?對象
關系模型
?
實體類--->表,采用<class>標簽映射
實體類中的普通屬性(不包括集合、自定義類和數組)------->表字段,采用<property>標簽映射
?
映射類:
[java]?view plaincopyprint?
package?com.jialin.hibernate;?? ?? import?java.util.Date;?? ?? public?class?User?{?? ????private?int?id;?? ????private?String?name;?? ????private?String?password;?? ?? ????public?int?getId()?{?? ????????return?id;?? ????}?? ?? ????public?void?setId(int?id)?{?? ????????this.id?=?id;?? ????}?? ?? ????public?String?getName()?{?? ????????return?name;?? ????}?? ?? ????public?void?setName(String?name)?{?? ????????this.name?=?name;?? ????}?? ?? ????public?String?getPassword()?{?? ????????return?password;?? ????}?? ?? ????public?void?setPassword(String?password)?{?? ????????this.password?=?password;?? ????}?? ?? }??
?
注:
實體類的設計原則:
* 實現無參的默認的構造函數
* 提供一個標識
* 建議不要使用final修飾實體類(因為采用load延時加載數據的時候會繼承實體類生成代理對象)
* 建議為實體類生成getter和setter方法(如果不使用,需要用屬性field標識)
?
?
?
映射文件具體說明:
[html]?view plaincopyprint?
?? <?xml?version="1.0"?>?? ?? <!DOCTYPE?hibernate-mapping?PUBLIC??? ????"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN"?? ????"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">?? ?? ?? <hibernate-mapping?package="com.jialin.hibernate">?? ????<!--?? ????????對象關系映射的開始:class元素表示類和數據庫中的表的映射關系。?? ????????name屬性指定持久化類(或者接口)的Java全限定名;?? ????????table屬性指定要映射的對應的數據庫表名,如果省略,則以name作為表名?? ?????-->?? ?? ????<class?name="User"?table="t_user">?? ?????<!--?? ????????持久化類對象的對象標識符(OID)和表的主鍵的映射關聯:?? ????????name屬性指定類中作為OID的屬性名;?? ????????column屬性表中主鍵字段的名字;如果省略,則以name作為字段名?? ??????-->?? ?????? ????????<id?name="id"?column="id">?? ?????????????? ????????????<generator?class="native"?/>?? ????????</id>?? ????????<!--??? ????????????普通屬性的映射:?? ????????????name屬性:屬性的名字,以小寫字母開頭;?? ????????????column屬性:對應的數據庫字段名.如果省略,則以name作為字段名?? ????????????type屬性:指定Hibernate的映射類型、如果省略,則自動匹配?? ????????-->?? ????????<property?name="name"?column="user_name"?type="string"/>?? ????????<property?name="password"?/>?? ????</class>?? ?? </hibernate-mapping>??
?
注意:如果實體類的名稱或實體類中屬性的名稱和數據庫關鍵字重復,將會出現問題,可以考慮采用table屬性和column屬性對其進行重新命名
總結
以上是生活随笔為你收集整理的浅析Hibernate映射(一)——基本映射的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。