Hibernate基礎映射
在說Hibernate映射前,我們先來了解下對象關系映射 ORM。
ORM的實現思想就是將關系數據庫中表的數據映射成對象,以對象的形式展現。這樣開發者就能夠把對數據庫的操作轉化為對這些對象的操作。
我們來看一張圖
通過該圖。我們能夠看出業務實體,在數據庫中表現為關系數據,而在內存中表現為對象。應用程序處理對象非常easy,可是非常難處理關系數據。ORM做到了關系數據和對象數據之間的映射。能夠通過映射關系自己主動產生SQL語句。在業務邏輯層和數據層之間充當橋梁。
Hibernate映射
Hibernate文件
- 映射類(*.java):它是描寫敘述數據庫表的結構,表中的字段在類中被描寫敘述成屬性,將來就能夠實現把表中的記錄映射成為該類的對象了。
- 映射文件(*.hbm.xml):它是指定數據庫表和映射類之間的關系。包含映射類和數據庫表的相應關系、表字段和類屬性類型的相應關系以及表字段和類屬性名稱的相應關系等。
- 數據庫配置文件(*.properties/*.cfg.xml):它是指定與數據庫連接時須要的連接信息。比方連接哪種數據庫、登錄數據庫的username、登錄password以及連接字符串等。當然還能夠把映射類的地址映射信息放在這裏。
基本映射:
詳細看操作
1映射實體類
//默認空構造函數的重要性 public class User { public User() { // TODO Auto-generated constructor stub } public User(String id,String name){ this.id=id; this.name=name; } private String id; public String getId() { return id; } public void setId(String 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; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Date getExprieTime() { return exprieTime; } public void setExprieTime(Date exprieTime) { this.exprieTime = exprieTime; } private String name; private String password; private Date createTime; private Date exprieTime; }
實體類的設計原則:
* 實現無參的默認的構造函數
* 提供一個標識
*建議不要使用final修飾實體類(由於採用load延時載入數據的時候會繼承實體類生成代理對象)
*建議為實體類生成getter和setter方法(假設不使用。須要用屬性field標識)
2映射文件User.hbm.xml
<?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> <!--1、class和table的映射。name屬性是實體名。table屬性是表名(table可省略,則name即是映射的表名)--> <class name="com.bjpowernode.hibernate.User"> <!-2、主鍵映射,name屬性是實體類的標識符屬性,相應table的主鍵。即用column表示(column相同可省略)--> <id name="id" access="field"> <!--主鍵生成器,class屬性表示生成策略,依據不同的需求選擇--> <generator class="uuid"/> </id> <!--3、其它屬性的映射 property--> <property name="name" length="40" unique="true" /> <property name="password"/> <property name="createTime"/> <property name="exprieTime"/> <filter name="testFiltere" condition="id < :myid"></filter> </class> </hibernate-mapping>
3hibernate.cfg.xml配置文件
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernast_test</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">hanhan</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!--打印sql--> <property name="hibernate.show_sql">true</property> <!--在沒有表的時候。創建sessionfactroy 時。就會去創建表(update的方式,不刪除原有數據)--> <property name="hibernate.hbm2ddl.auto">update</property> <mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/> </session-factory> </hibernate-configuration>
Hibernate的主鍵生成策略種類
手動:Assigned
Hibernate主動:uuid
數據庫交互:
須要和數據庫交互以生成id的:guid、identity、sequence、native、foreign
說明:須要和數據庫交互生成。須要經過一次查詢才幹生成
Guid,identity:MySQL,SQLserver的生成方式
sequence:Oracle,db2的生成方式。自增序列
native:identity+sequence,跨平臺
foreign:僅僅適用基於共享主鍵的一對一關聯映射的時候使用。即一個對象的主鍵是參照的還有一張表的主鍵生成的。
總結:
Hibernate的基本映射:重點是對主鍵生成策略的認識,依據不同數據庫選擇不同的方式,重要理解。
Hibernate基礎映射