ORM中間件Hibernate的靜態(tài)結(jié)構(gòu)與調(diào)用步驟
Session接口向業(yè)務(wù)邏輯層提供讀、寫和刪除域?qū)ο蟮姆椒ǎ?它不公開任何數(shù)據(jù)訪問細(xì)節(jié), SessionImpl實(shí)現(xiàn)了Session接口,? 它通過JDBC API實(shí)現(xiàn)了數(shù)據(jù)的持久化。SessionFactory類負(fù)責(zé)創(chuàng)建Session實(shí)例。Hibernate在初始化階段把對象-關(guān)系映射文件中的映射元數(shù)據(jù)讀入到SessionFactory的緩存中。
執(zhí)行步驟舉例:
如果業(yè)務(wù)邏輯層的類的某個方法希望從數(shù)據(jù)庫中刪除一個對象, 只需要調(diào)用Session的delete(aObject)方法(aObject為某一需要刪除的對象);具體步驟為:
1)運(yùn)用Java反射機(jī)制, 獲得aObject對象的的類型為AObject.class;
2)參考對象-關(guān)系映射元數(shù)據(jù), 了解到與AObject類對應(yīng)的相關(guān)的表;
3)根據(jù)以上映射信息生成SQL語句;
4)調(diào)用JDBC API, 執(zhí)行以上SQL語句。
確切地說, Hibernate在初始化階段就會根據(jù)映射信息預(yù)定義一些SQL語句(Insert、Delete、Update), 這些語句存放在SessionFactory的緩存中, 當(dāng)執(zhí)行例如delete()方法時, 只要調(diào)用相關(guān)的SQL語句就可以了。