freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

多級查詢在資產(chǎn)管理系統(tǒng)中的設計與實現(xiàn)畢業(yè)論文(編輯修改稿)

2025-08-13 23:27 本頁面
 

【文章內(nèi)容簡介】 , Hibernate 的 Session 不同于 JSP 應用中的HttpSession。當我們使用 Session 這個術語時,我們指的是 Hibernate 中的 Session,而將 HttpSession 對象稱為用戶 Session。 (2) SessionFactory 接口。 這里用到了一個設計模式 —— 工廠模式,用戶程序從工廠類 SessionFactory 中取得 Session 的實例。 SessionFactory 并不是輕量級的。實際上它的設計者的意圖是讓它能在整個應用中共享。典型地來說,一個項目通常只需要一個 SessionFactory 就夠了,但是當項目要操作多個數(shù)據(jù)庫時,那就必須為每個數(shù)據(jù)庫指定 一個 SessionFactory。 SessionFactory 在 Hibernate 中實際起到了一個緩沖區(qū)的作用,它緩沖了Hibernate 自動生成的 SQL 語句和一些其它的映射數(shù)據(jù),還緩沖了一些將來有可能重復利用的數(shù)據(jù)。 (3) Configuration 接口。 Configuration 接口對 Hibernate 進行配置、啟動。在 Hibernate 的啟動過程中,Configuration 類的實例會定位映射文件的位置并讀取有關配置,然后創(chuàng)建一個SessionFactory 對象。 (4) Transaction 接口。 Transaction 接口是對實際事務實現(xiàn)的一個抽象,這些實現(xiàn)包括 JDBC 的事務、JTA 中的 UserTransaction、甚至可以是 CORBA 事務。 Transaction 接口是一個可選的 API。 11 (5) Query 接口。 Query 接口讓你方便地對數(shù)據(jù)庫及持久對象進行查詢,它經(jīng)常被用來綁定查詢參數(shù)、限制查詢記錄數(shù)量,并最后執(zhí)行查詢操作。 以上描述的 5 個核心接口幾乎在任何實際開發(fā)中都會用到,通過這些接口,開發(fā)人員不僅可以存儲和獲得持久對象,并且能夠進行事務控制。 其它重要 API 除了以上五個核心接口外,還有幾個比較重要的接口: (1) Callback 接口。 當一些有用的事件發(fā)生時,例如持久對象的載入、存儲、刪除時, Callback 接口會通知 Hibernate 去接收一個通知消息。一般而言, Callback 接口在用戶程序中并不是必須的,但要在項目中創(chuàng)建審計日志時,可能會用到它。 (2) Types Type 在整個構架中是一個非常基礎、有著強大功能的元素。一個 Type 對象能將一個 Java 類型映射到數(shù)據(jù)庫中一個表的字段中去(實質上,它可以映射到表的多個字段中去)。持久類的所有屬性都 對應一 個 type。這種設計思想使 Hibernate有著高度的靈活性和擴展性。 Hibernate 內(nèi)置很多 type 類型,幾乎包括所有的 java 基本類型,例如、 、 byte[]和 。 不僅如此, Hibernate 還支持用戶自定義的 type,通過實現(xiàn)接口 UserType 和接口 CompositeUserType,可以加入自己的 type。 (3) 策略接口 Hibernate 與某些其它開源軟件不同的還有一點 —— 高度的可 擴展性,這通過它的內(nèi)置策略機制來實現(xiàn)。當你感覺到 Hibernate 的某些功能不足,或者有某些缺陷時,可以開發(fā)一個自己的策略來替換它,而所要做的僅僅只是繼承它的某個策略接口,然后實現(xiàn)新就可以了,以下是它的策略接口: ○ 1 主鍵生成( IdentifierGenerator 接口) ○ 2 本地 SQL 語言支持( Dialect 抽象類) ○ 3 緩沖機制( Cache 和 CacheProvider 接口) ○ 4 JDBC 連接管理( ConnectionProvider 接口) 12 ○ 5 事 務管理( TransactionFactory, Transaction 和 TransactionManagerLookup接口) ○ 6 ORM 策略( ClassPersister 接口) ○ 7 屬性訪問策略( PropertyAccessor 接口) ○ 8 代理對象的創(chuàng)建( ProxyFactory 接口) 映射機制 J2EE 框架 下的應用程序都是基于域模型的,在這種模型下,應用程序實現(xiàn) 復雜的業(yè)務邏輯和復雜的實體交互。 ORM 映射機制最適合使用在基于復雜的域 模型應用中,域模型越復雜,使用 Hibernate 所帶來的好處越明顯。 在域 模 型 的執(zhí)行中, Hibernate 采用透明持久對對象 /關系進行持久化。透明 表示在域模型的持久類和持久邏輯本身之間完全的關系分離,在持久邏輯中,持 久類完全不知道也不依賴于持久機制。 普通 Java 對象 POJO Hibernate的 ORM從編程模型上看就是把一個普通 Java對象 POJO(Plain Ordinary Java Object)映射為關系數(shù)據(jù)庫中的表。映射是用一個 XML文檔 (XML document)來定義的。這個映射文檔被設計為易讀的,并且可以手工修改。映射 語言是以 Java為中心的,意味著映射是按照持久化類的定義來創(chuàng)建的,而非表 的定義。 一個 POJO很像一個 JavaBean,沒有 EntityBean那樣冗長的接口。 Hibernate 正是在使用 POJO的域模型中工作的。 一個 POJO聲明了屬性 (代表對象的狀態(tài) )、業(yè)務方法 (代表對象的行為 )和對屬性的訪問方法。以一個 Course對象為例,簡單說明如下 : public class Course implements Seiralizable ( public String courseName。 public int id 。 public String getCourseName() (return 。) 13 public void setCourseName(String name) (courseName = name。) public int getId() (return 。) } Hibernate不要求持久對象實現(xiàn) Seiralizable(序列化 )接口,但是當對象存儲在HttpSession中或者用 RMI進行值傳遞時,序列化是必須的。 屬性通常 作為實例變量與屬性訪問方法一起執(zhí)行。訪問方法是用來檢索實例變量的值和改變其值的方法,分別稱為 geter和 seter方法。 Hibernate不要求訪問方法聲明為公有的,它可以很容易的使用私有訪問方法來管理屬性。 繼承映射 最簡單的類到數(shù)據(jù)庫表的映射策略是“一個類一張表”。這個方法確實聽起來很簡單,但是在遇到繼承問題 的時候就不能有效的起作用了。繼承是面向對象結構中最明顯的特征。繼承關系有三種不同的映射方法 : 1) 每個具體的類映射為一個表。 這跟前面講的最簡單的映射方法是一樣的,一個類的 所有屬性,包括從超類繼承過來的屬性,都一一映射為數(shù)據(jù)庫表的列。即 超類 superclass映射為一個表,子類 subclass:映射為單獨的表,在數(shù)據(jù)庫中,它們之間的關系通過外鍵 (Foreign Key)表示。這種映射策略不需要任何 Hibernate的特殊映射聲明,只需要把每一個類的映射包含在 class/class聲明中,并且為每個 類定義一個表屬性。這種方法的主要問題是它不能很好的支持多態(tài)關系。還有就是在這些表中,不同表的不同列屬性有共同的語意,如子類繼承超類的屬性,這使關系的維護更復雜了。例如對超類屬性的改變會導致很多列的改變,這也使在子類上執(zhí)行數(shù)據(jù)完整性約束更加困難。 2) 整個類層次關系映射為一個表。 作為對“一個類一個表”策略的替代,我們可以把整個類層次關系映射為一個表,這個表的列包括類層次關系中所有類的屬性。每一個具體的子類用特定的行來表示,它可以通過列 discriminator的值來識別,如下所示 :父類的映射增加一個discriminatorvalue屬性,它的值用來標志父類,同時 增加 一 discriminator: 14 class name=superClass table=supertable discriminatorvalue=super discriminator column=colunmName type= Type / ?? 在子類的映射中也增加一個 discriminatorvalue屬性,它的值用來標志該子 類 :discriminatorvalue的值在分別查詢父類和子類時做查詢 條件 : subclass name=subClass discriminatorvalue=sub / subclass / class 新增加的 discriminator列用來區(qū)分持久類,它不是類的屬性,由 Hibernate內(nèi)部使用,它的值,即 discriminatorvalue。給出的值會被 Hibernate自動設置和檢索。整個層次關系,超類和子類都被映射在了同一張表中,超類用 class聲明,子類用subclass聲明,當然,子類中又可以包括子類。 這種映射策略進行多態(tài) 查詢時可以一次執(zhí)行,在分別進行超類和子類查詢時,可以用 discriminator列的值做條件,因為超類和子類有不同的 discriminator值。 3) 子類和超類映射為不同的表。 即每一個在持久關系中定義的子類都映射為單獨的一個表。與第一種策略不同的是,子類對應的表只包括非繼承屬性,即每一個屬性都是子類特有的。每一個子類的表有一個主鍵與超類相關聯(lián)。 映射文件中子類的聲明用 joinedsubclass表示,嵌套在 class中,并且要聲明一個主鍵 key。 這種策略的主要好處是關系模型完全規(guī)格化,完整 性約束的定義也直截了當。對特定子類的多態(tài)聯(lián)結是通過指向該子類的表的外鍵來表示的。 Hibernate在執(zhí)行多態(tài)查詢的時候,自動把超類和子類的表外聯(lián)接 (outer join)查詢,如果只限制在對子類查詢時, Hibernate使用內(nèi)聯(lián)接 (inner join)。 根據(jù)經(jīng)驗來看,復雜的類層次執(zhí)行效率讓人無法接受,查詢需要聯(lián)接多個表或者許多順序讀操作。因此,針對應用程序中的類層次,必須選擇一種合適的映 射策略或者對映射策略做一個適當?shù)慕M合。一般有以下原則: 在不要求多態(tài)關聯(lián)和查詢時,傾向于使用一個類一個表的映射策略; 如果要15 使用多態(tài)關聯(lián)并且子類中聲明的屬性相對較少,則傾向于使用一個類層次一個表 的映射策略 :如果要求多態(tài)關聯(lián)和查詢,并且子類聲明的屬性比較多,則使用一個子類一個表的映射策略。 查詢機制 查詢方法 檢索持久對象是 Hibernate的另一項重要功能。 Hibernate提供了以下幾種從數(shù)據(jù)庫中得到對象的方法 : 1)通過對對象圖的導航,從一個已經(jīng)裝載的對象開始,由它的屬性訪問方法來訪問相關聯(lián)的對象。當用戶導航對象圖的時候,如果 Session處于打開狀態(tài),Hibernate會自動裝載或者預裝 載對象圖中的結點。 2)通過標志符檢索。當已知對象的唯一標志符時,這種方法是最方便性能最好的。用標志符檢索對象可以用 loads和 geto兩種方法。 3)使用 Hibernate提供的查詢語言 (HQL),它是一個完全面向對象的查詢語言。HQL是 SQL的一個面向對象的方言,它與 ODMG OQL(對象數(shù)據(jù)庫查詢語言 )和EJBQL有非常類似,但是與 OQL不同的是它適用于使用 SQL的數(shù)據(jù)庫,并且比EJBQL功能更強大更優(yōu)雅。 HQL不是一個數(shù)據(jù)操縱語言,它只用來檢索對象,而不是更新刪除數(shù)據(jù)。對象狀態(tài)的同步是持久化管 理器的工作而不是開發(fā)者的工作。 HQL有以下高級特性 : ? 把數(shù)據(jù)約束應用到關聯(lián)對象的屬性 : ? 在事務范圍內(nèi)不裝載實體本身而檢索實體的屬性,這也被稱為報告查 (report query)或更確切的叫做注射 (projection); ? 對查詢結果排序; ? 對查詢結果分頁; ? 通過 groupby, having或者 sum, max等函數(shù)對結果集進行分類; ? 當檢索一行多對象時使用外聯(lián)接; ? 調用用戶定義的 SQL函數(shù); ? 子查詢 (嵌套查詢 )。 4)使用 Hibernate提供的 Criteria API查詢。 Criteria API提供了 一個類型安全的、16 面向對象的方法來執(zhí)行查詢,而不需要字符串操縱。它包括了基于實例對象的查詢。 5) 使用本地 SQL語言查詢 .Hibernate支持 16種數(shù)據(jù)庫方言,幾乎所有流行的數(shù)據(jù)庫它都支持,因此,用戶也可以直接使用自己熟悉的數(shù)據(jù)庫語言進行查詢。 在實際的 Hibernate應用程序中,各種檢索方法可以聯(lián)合使用,每一種檢索方法可以使用不同的數(shù)據(jù)獲取策略。這樣可以為應用程序中的用例找到最好的檢索方法和數(shù)據(jù)獲取策略,同時最小化 SQL查詢語句的數(shù)量,獲得最佳性能 . 在傳統(tǒng)的關系數(shù)據(jù)訪問中,利用內(nèi)聯(lián)接和外聯(lián)接檢索關聯(lián) 實體,可以用一條SQL語句獲取特定計算要求的數(shù)據(jù)。 ORM中最難的問題之一是為關系
點擊復制文檔內(nèi)容
研究報告相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1