1. 程式人生 > >hibernate工作原理及流程

hibernate工作原理及流程

使用hibernate開發了幾次小專案,但仍感覺對其理解的不是很到位,在這裡寫篇部落格加深理解。

同學習struts一樣,我個人認為要想熟練掌握一個框架,必先理解其原理。如果只是會用而不知其所以然,這跟照葫蘆畫瓢沒什麼區別。而且後續深入也會很吃力。

在瞭解原理前,先來了解下hibernate是一款什麼框架,即這款框架存在的意義是什麼。hibernate是一款將應用和資料庫連線起來的框架,封裝了許多對資料庫操作的方法,作為java web開發者,可以將其視為升級版的jdbc。下面來看(自畫渣圖)

                                                     

從圖中可以清晰地看出hibernate在應用中的位置,其主要配置檔案有兩個,一個是與java bean物件對應的.hbm.xml檔案和包含全域性對映的hibernate.cfg.xml檔案。

其中.hbm.xml檔案的數量與bean物件一致,即有多每一個bean物件都對應一個.hbm.xml檔案,其作用是將資料庫中的例項記錄與Bean屬性對應起來,包括資料型別,名稱等,

如:一個名為Product的java bean.其屬性有id, name, price。主鍵為id,其在資料庫中對應的表名為product

<hibernate-mapping package="com.bean">
    <class name="Product" table="product">
        <id name="id" column="id">
            <generator class="native">
            </generator>
        </id>
        <property name="name" column="name"
/>
        <property name="price" column="price"
 />
    </class>
     
</hibernate-mapping>

這樣hibernate才能操作正確的物件。而hibernate.cfg.xml除了負責配置資料庫連線等屬性,還負責配置.hbm.xml的對映

<hibernate-configuration>
 
    <session-factory>
        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123</property>
        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="current_session_context_class">thread</property>
        <property name="show_sql">true</property>
       <!--是否更新資料庫,配置update hibernate會自動幫我們建立資料表-->
        <property name="hbm2ddl.auto">update</property>
        <mapping resource="com/bean/Product.hbm.xml" />
        <mapping resource="com/bean/Category.hbm.xml" />
        <mapping resource="com/bean/User.hbm.xml" />
    </session-factory>
 
</hibernate-configuration>
如圖配置了Product,Category和User bean物件與資料庫的關係對映