Hibernate学习(二):heibernate核心接口
Hibernate是一種對JDBC做了輕量級封裝的對象---關(guān)系映射工具,所謂輕量級封裝,是指Hibernate并沒有完全封裝JDBC,Java應(yīng)用即可以通過Hibernate API訪問數(shù)據(jù)庫,還可以繞過Hibernate API,直接通過JDBC API來訪問數(shù)據(jù)庫。
??????????????????????????????????????????????????????????????????????????????????????????????? ?-----摘自Hibernate文檔
前一篇文章中的例子中基本上已經(jīng)涵蓋了對數(shù)據(jù)庫的增刪改查操作,我們通過Hibernate操縱數(shù)據(jù)庫時應(yīng)該按照一個什么樣的步驟來呢?要用到Hibernate的哪些API呢?一般來說,所有的Hibernate應(yīng)用都會訪問6個核心接口或者類,它們是:Configuration、SessionFactory、Session、Transaction、Query和Criteria,它們的關(guān)系如下圖所示。
從上面的代碼可以看出,我們首先會執(zhí)行靜態(tài)塊里面的代碼,它的作用就是創(chuàng)建一個Configuration對性和SessionFactory對象:
1.Configuration configuration=new Configuration();
2.sessionFactory=configuration.configure().buildSessionFactory();
這和我們圖中所描述的順序是一致的。下面看我們的saveCustomer方法,在這個方法里面我們進(jìn)行了如下兩個步驟:
3.Session session=sessionFactory.openSession();
4.Transaction tx=session.beginTransaction ();
在這幾個步驟之后再調(diào)用Session接口的save方法向數(shù)據(jù)庫中寫入數(shù)據(jù),由于這個方法沒有執(zhí)行查詢操作,所以就沒有用到Query接口和Criteria接口。那么這幾個接口或者類具體起什么作用呢?
一.Configuration
Configuration對象用于配置并根啟動Hibernate。Hibernate應(yīng)用通過Configuration實例來指定對象—關(guān)系映射文件的位置或者動態(tài)配置Hibernate的屬性,然后創(chuàng)建SessionFactory實例。注意藍(lán)色背景的文字,Configuration實例是什么時候指定ORM文件的地址的呢?我們可以查看Configuration的源代碼,它的configure()方法是這樣實現(xiàn)的:
public Configuration configure() throws HibernateException {
?????? configure( "/hibernate.cfg.xml" );//此處指定了ORM文件的位置
?????? return this;
?? }
原來它是在這里指定了ORM文件的位置,這就是為什么Hibernate總是默認(rèn)到classpath下去尋找hibernate.cfg.xml文件的原因了。實際上我們還可以通過configure(String resource)來動態(tài)的指定配置文件,只不過通常我們都是采用的默認(rèn)設(shè)置罷了。這樣的話我們的配置文件就都被讀取了,同時配置文件中通過<mapping>元素引入的映射文件也被讀取了。
二.SessionFacory
前面我們已經(jīng)說Configuration負(fù)責(zé)創(chuàng)建SessionFactory實例,那么創(chuàng)建的時候有什么動作呢?我們可以查看Configuration的buildSessionFactory方法,這個方法把Configuration對象所包含的所有配置信息都拷貝到SessionFactory對象的緩存當(dāng)中了,并且SessionFactory對象創(chuàng)建之后就不再和Configuration對象關(guān)聯(lián)了。那么SessionFactory對象是干什么用的呢?一般而言,一個SessionFactory對象就代表一個數(shù)據(jù)庫存儲源,通常一個應(yīng)用程序只需要創(chuàng)建一個SessionFactory實例即可。由此我們看出SessionFactory具備如下兩個特點:
1.? 線程安全。整個應(yīng)用共用一個SessionFactory實例。
2.? 重量級。在SessionFactory中存放了Hibernate配置信息以及映射元素?fù)?jù)信息,這些都需要很大的緩存。
一般來說,SessionFactory的主要作用就是創(chuàng)建Session對象,所有的線程都是從SessionFactory中獲取Session對象來處理客戶請求的。
三.Session
這個可以說是被使用最多了,只要涉及到增刪改查,都離不開Session實例,前面我們也已經(jīng)說了所有的線程都是從SessionFactory中獲取Session對象來處理客戶請求的,因此Session的每個方法都值得我們?nèi)パ芯亢吞接?#xff0c;不過最常用的還是save、saveOrUpdate、update、delete、createQuery等方法了,關(guān)于Session是如何作用的以及它的工作原理在以后的實踐中再一步一步的進(jìn)行學(xué)習(xí)和探討,至于其它的如Query、Transaction等都是和Session結(jié)合在的一起使用的,在這里也就不多說了。
實際上上圖的表述不是很準(zhǔn)確,因為除了Configuration之外其它的都是接口,接口是不能被實例化的,只能說是創(chuàng)建了一個這個接口類型的實例。從前面的文章中摘取幾個代碼片段來看:
本文轉(zhuǎn)自 646676684 51CTO博客,原文鏈接:http://blog.51cto.com/2402766/580984,如需轉(zhuǎn)載請自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的Hibernate学习(二):heibernate核心接口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [CommunityServer]看RB
- 下一篇: 【原】画流程图工具visio使用技巧汇总