hibernate工作原理及流程
阿新 • • 發佈:2019-02-08
使用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物件與資料庫的關係對映