日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate学习(二):heibernate核心接口

發布時間:2025/3/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate学习(二):heibernate核心接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Hibernate是一種對JDBC做了輕量級封裝的對象---關系映射工具,所謂輕量級封裝,是指Hibernate并沒有完全封裝JDBCJava應用即可以通過Hibernate API訪問數據庫,還可以繞過Hibernate API,直接通過JDBC API來訪問數據庫。

??????????????????????????????????????????????????????????????????????????????????????????????? ?-----摘自Hibernate文檔

前一篇文章中的例子中基本上已經涵蓋了對數據庫的增刪改查操作,我們通過Hibernate操縱數據庫時應該按照一個什么樣的步驟來呢?要用到Hibernate的哪些API呢?一般來說,所有的Hibernate應用都會訪問6個核心接口或者類,它們是:Configuration、SessionFactory、SessionTransactionQueryCriteria,它們的關系如下圖所示。

  • static{ ?
  • ???????try{ ?
  • ???????????Configuration?configuration=new?Configuration(); ?
  • ????????????sessionFactory= ?
  • configuration.configure().buildSessionFactory(); ?
  • ???????} ?
  • ???????catch(Exception?e){ ?
  • ???????????e.printStackTrace(); ?
  • ???????} ?
  • ???????finally{ ?
  • ???????} ?
  • ????} ?
  • //以saveCustomer方法為例來進行闡述 ?
  • ?
  • public?void?saveCustomer(Customer?customer){ ?
  • ?
  • ???????Session?session=sessionFactory.openSession(); ?
  • ???????Transaction?tx?=?null;//局部變量必須賦予初始值 ?
  • ???????try{ ?
  • ???????????tx=session.beginTransaction(); ?
  • ???????????//事務開始 ?
  • ???????????session.save(customer); ?
  • ???????????tx.commit(); ?
  • ???????} ?
  • ???????catch(Exception?e){ ?
  • ???????????if(tx!=null)?tx.rollback(); ?
  • ???????????e.printStackTrace(); ?
  • ???????} ?
  • ???????finally{ ?
  • ???????????session.close(); ?
  • ???????} ?
  • ????} ?
  • ?
  • 從上面的代碼可以看出,我們首先會執行靜態塊里面的代碼,它的作用就是創建一個Configuration對性和SessionFactory對象:

    1.Configuration configuration=new Configuration();
    2.sessionFactory=configuration.configure().buildSessionFactory();

    這和我們圖中所描述的順序是一致的。下面看我們的saveCustomer方法,在這個方法里面我們進行了如下兩個步驟:

    3.Session session=sessionFactory.openSession();
    4.Transaction tx=session.beginTransaction ();

    在這幾個步驟之后再調用Session接口的save方法向數據庫中寫入數據,由于這個方法沒有執行查詢操作,所以就沒有用到Query接口和Criteria接口。那么這幾個接口或者類具體起什么作用呢?

    一.Configuration

    Configuration對象用于配置并根啟動Hibernate。Hibernate應用通過Configuration實例來指定對象—關系映射文件的位置或者動態配置Hibernate的屬性,然后創建SessionFactory實例。注意藍色背景的文字,Configuration實例是什么時候指定ORM文件的地址的呢?我們可以查看Configuration的源代碼,它的configure()方法是這樣實現的:

    public Configuration configure() throws HibernateException {

    ?????? configure( "/hibernate.cfg.xml" );//此處指定了ORM文件的位置

    ?????? return this;

    ?? }

    原來它是在這里指定了ORM文件的位置,這就是為什么Hibernate總是默認到classpath下去尋找hibernate.cfg.xml文件的原因了。實際上我們還可以通過configure(String resource)來動態的指定配置文件,只不過通常我們都是采用的默認設置罷了。這樣的話我們的配置文件就都被讀取了,同時配置文件中通過<mapping>元素引入的映射文件也被讀取了。

    二.SessionFacory

    前面我們已經說Configuration負責創建SessionFactory實例,那么創建的時候有什么動作呢?我們可以查看Configuration的buildSessionFactory方法,這個方法把Configuration對象所包含的所有配置信息都拷貝到SessionFactory對象的緩存當中了,并且SessionFactory對象創建之后就不再和Configuration對象關聯了。那么SessionFactory對象是干什么用的呢?一般而言,一個SessionFactory對象就代表一個數據庫存儲源,通常一個應用程序只需要創建一個SessionFactory實例即可。由此我們看出SessionFactory具備如下兩個特點:

    1.? 線程安全。整個應用共用一個SessionFactory實例。
    2.? 重量級。在SessionFactory中存放了Hibernate配置信息以及映射元素據信息,這些都需要很大的緩存。

    一般來說,SessionFactory的主要作用就是創建Session對象,所有的線程都是從SessionFactory中獲取Session對象來處理客戶請求的。

    三.Session

    這個可以說是被使用最多了,只要涉及到增刪改查,都離不開Session實例,前面我們也已經說了所有的線程都是從SessionFactory中獲取Session對象來處理客戶請求的,因此Session的每個方法都值得我們去研究和探討,不過最常用的還是save、saveOrUpdate、update、delete、createQuery等方法了,關于Session是如何作用的以及它的工作原理在以后的實踐中再一步一步的進行學習和探討,至于其它的如Query、Transaction等都是和Session結合在的一起使用的,在這里也就不多說了。

    實際上上圖的表述不是很準確,因為除了Configuration之外其它的都是接口,接口是不能被實例化的,只能說是創建了一個這個接口類型的實例。從前面的文章中摘取幾個代碼片段來看:










    本文轉自 646676684 51CTO博客,原文鏈接:http://blog.51cto.com/2402766/580984,如需轉載請自行聯系原作者

    總結

    以上是生活随笔為你收集整理的Hibernate学习(二):heibernate核心接口的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。