睫晉姬

          Hibernate的五個核心接口介紹

            所有的Hibernate應用中都會訪問Hibernate的5個核心接口。

            Configuration接口:配置Hibernate,根啟動Hibernate,創建SessionFactory對象。

            SessionFactory接口:初始化Hibernate,充當數據存儲源的代理,創建Session對象。

            Session接口:負責保存、更新、刪除、加載和查詢對象。

            Transaction:管理事務。

            Query和Criteria接口:執行數據庫查詢。

            1.Configuration接口

            Configuration對象用于配置并且啟動Hibernate。Hibernate應用通過Configuration實例來指定對象-關系映射文件的位置或者動態配置Hibernate的屬性,然后創建SessionFactory實例。

            2.SessionFactory接口

            一個SessionFactory實例對應一個數據存儲源,應用從SessionFactory中獲得Session實例。SessionFactory有以下特點:

            它是線程安全的,這意味著它的同一個實例可以被應用的多個線程共享。

            它是重量級的,這意味著不能隨意創建或銷毀它的實例。如果應用只訪問一個數據庫,只需要創建一個SessionFactory實例,在應用初始化的時候創建該實例。如果應用同時訪問多個數據庫,則需要為每個干洗機創建數據庫創建一個單獨的SessionFactory實例。

            之所以稱SessionFactory是重量級的,是因為它需要一個很大的緩存,用來存放預定義的SQL語句以能映射元數據等。用戶還可以為SesionFactory配置一個緩存插件,這個緩存插件被稱為Hibernate的第二級緩存。,該緩存用來存放被工作單元讀過的數據,將來其他工作單元可能會重用這些數據,因此這個緩存中的數據能夠被所有工作單元共享。一個工作單元通常對應一個數據庫事務。

            3.Session接口

            Session接口是Hibernate應用使用最廣泛的接口。Session也被稱為持久化管理器,它提供了和持久化相關的操作,如添加、更新、刪除、加載和查詢對象。

            Session有以下特點:

            不是線程安全的,因此在設計軟件架構時,應該避免多個線程共享同一個Session實例。

            Session實例是輕量級的,所謂輕量級,是指它的創建和銷毀不需要消耗太多的資源。這意味著在程序中可以經常創建和銷毀Session對象,例如為每個客戶請示分配單獨的Session實例,或者為每個工作單元分配單獨的Session實例。

            Session有一個緩存,被稱為Hibernate的第一級緩存,它存放被當前工作單元加載的對象。每個Session實例都有自己的緩存,這個Sesion實例的緩存只能被當前工作單元訪問。

            4.Transaction接口

            Transaction接口是Hibernate的數據庫事務接口,它對底層的事務接口做了封裝,底層事務接口包括:

            JDBC API、JTA(Java Transaction API)、CORBA(Common Object Requet Broker Architecture)API

            Hibernate應用可通過一致的Transaction接口來聲明事務邊界,這有助于應用在不同的環境容器中移植。盡管應用也可以繞過Transaction接口,直接訪問底層的事務接口,這種方法不值得推薦,因為它不利于應用在不同的環境移植。

            5.Query和Criteria接口

            Query和Criteria接口是Hibernate的查詢接口,用于向數據庫查詢對象,以及控制執行查詢的過程。Query實例包裝了一個HQL查詢語句,HQL查詢語句和SQL查詢語句有些相似,但HQL查詢語句是面向對象的,它引用類句及類的屬性句,而不是表句及表的字段句。Criteria接口完全封裝了基于字符串的查詢語句,比Query接口更加面向對象,Criteria接口擅長執行動態查詢。

            Session接口的find()方法也具有數據查詢功能,但它只是執行一些簡單的HQL查詢語句的快捷方法,它的功能遠沒有Query接口強大。

          posted on 2009-12-05 17:10 睫晉姬 閱讀(237) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 疏附县| 阿鲁科尔沁旗| 恩施市| 夏津县| 兰考县| 长岛县| 古浪县| 睢宁县| 金川县| 财经| 镇赉县| 长岛县| 从化市| 剑阁县| 高邑县| 棋牌| 泗洪县| 宁阳县| 海阳市| 新建县| 长丰县| 兴城市| 彩票| 天等县| 铜陵市| 伊川县| 密云县| 甘谷县| 武汉市| 张北县| 洞口县| 贵溪市| 岳普湖县| 蒲城县| 讷河市| 措美县| 凤山市| 金湖县| 延津县| 涟源市| 梓潼县|