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

正文內(nèi)容

基于json的異構(gòu)數(shù)據(jù)庫整合研究畢業(yè)論文(參考版)

2025-06-25 01:35本頁面
  

【正文】 它用于對軟件產(chǎn)品進(jìn)行壓力測試,盡管最初它只是被設(shè)計(jì)用于測試Web應(yīng)用測試,但后來它也逐步擴(kuò)展到其他的測試領(lǐng)域。圖53 Badboy錄制腳本 使用JMeter測試JMeter的全稱是Apache JMeter。由Badboy生成的腳本可以被JMeter所使用,這些腳本記錄著QMS、BOM、SCM三個(gè)應(yīng)用系統(tǒng)訪問中間件系所用到的用戶名、密碼以及所作的Action信息,總之是用戶操作QMS、BOM、SCM所需用到的完整信息。 使用Badboy錄制腳本Badboy是一個(gè)被用來設(shè)計(jì)測試應(yīng)用程序用例的優(yōu)秀工具。 } 測試環(huán)境搭建 系統(tǒng)環(huán)境服務(wù)器采用Dell PowerEdge R410(Xeon E5606/4GB/300GB/RAID1),操作系統(tǒng)為Windows Server 2008 Enterprise Edition。 } (, ())。 } catch (Exception e) { tr = e。 try { (12, 0)。 } } 單元測試為了保證編碼工作的質(zhì)量,在完成了中間件的一個(gè)功能以后,需要對代碼進(jìn)行測試,本文引入了jUnit進(jìn)行單元測試,通過斷言來預(yù)測程序的結(jié)果,提高了程序開發(fā)的效率。 } catch (RuntimeException exc) { (findreobycond failed, exc)。 ()。 } if(null != endDate){ ((checktime, endDate))。 !.equals(supplyInfo)){ ((supplyid, supplyInfo))。 } if(null != supplyInfo amp。amp。 Criteria ctr = ()。 將數(shù)據(jù)庫的表映射為POJO類Hibernate要使用關(guān)系數(shù)據(jù)庫中表,首先需要將數(shù)據(jù)表映射為POJO類,它指出了關(guān)系型數(shù)據(jù)庫與POJO類的映射細(xì)節(jié)。 編碼實(shí)現(xiàn)中間件在本文經(jīng)過以上章節(jié)嚴(yán)密的論證了JSON作為異構(gòu)數(shù)據(jù)庫中間件的數(shù)據(jù)交換格式以后,在此基礎(chǔ)上分析了基于JSON的異構(gòu)數(shù)據(jù)庫整合中間件的實(shí)現(xiàn),現(xiàn)在是編碼的時(shí)候了去實(shí)現(xiàn)中間件的時(shí)候了。這些使開發(fā)者在整合Hibemate和Spring時(shí),能夠大幅度的縮短程序編寫的流程,同時(shí)Spring提供了與JDBC比較類似的使用模型,提供使用Hibernate時(shí)的聲明式的事務(wù)管理與編程式的事務(wù)管理。 框架整合使用在本文的開發(fā)中為了提高效率,本文使用了Spring和Hibernate。所以這里選擇Hibernate作為數(shù)據(jù)庫持久層框架。Java里比較流行的數(shù)據(jù)持久層ORM開源框架有Hibernate、MyBatis。 選擇框架在Java語言里,由于Java的反射機(jī)制,Java世界里有大量的優(yōu)秀的Java開源框架,由于公開源代碼,所以它的問題都被及早發(fā)現(xiàn)了,所以其代碼質(zhì)量是很高的,性能也非??煽?。這樣他可以訪問遠(yuǎn)程的數(shù)據(jù)庫,并且同時(shí)可以為其他各種各樣的應(yīng)用程序提供跨域的Web服務(wù)。如圖51所示,BOM既訪問MySQL數(shù)據(jù)庫同時(shí)還訪問PostgreSQL數(shù)據(jù)庫,QMS既訪問PostgreSQL數(shù)據(jù)庫還訪問SQL Server數(shù)據(jù)庫。這三個(gè)系統(tǒng)本來是各自獨(dú)立運(yùn)行的,各自擁有自己的數(shù)據(jù)庫,SCM和QMS是B/S模式,BOM是C/S模式,也就是說這3個(gè)系統(tǒng)之間是是異構(gòu)的。 中間件分析中間件的兩端分別是數(shù)據(jù)庫和應(yīng)用程序。數(shù)據(jù)庫選擇PostgreSQL 、SQL Server 200MySQL ,并且用多個(gè)異構(gòu)的數(shù)據(jù)庫來進(jìn)行開發(fā)測試。操作系統(tǒng)選擇Windows Server 2003,而不選擇Windows XP或者Linux操作系統(tǒng),是因?yàn)椋篧indows 7操作系統(tǒng)圖形界面比較復(fù)雜,比較耗費(fèi)系統(tǒng)資源.;XP內(nèi)核不如Windows Server 2003穩(wěn)定;Java工程是跨平臺(tái)的,在Windows平臺(tái)下開發(fā)的Java WebService Project部署在Linux是沒有任何問題的。在完成這些工作之后,本章在這些研究結(jié)果的基礎(chǔ)之上進(jìn)行了基于JSON的數(shù)據(jù)庫映射中間件的開發(fā)和測試工作,最終根據(jù)測試結(jié)果對中間作了一個(gè)評價(jià)。本章的算法也是開發(fā)中間件的關(guān)鍵,因?yàn)槿绻麤]有合適的完善的算法來表達(dá)關(guān)系數(shù)據(jù)庫的關(guān)系,那么中間件的開發(fā)將無從談起。由于關(guān)系數(shù)據(jù)庫的表之間存在復(fù)雜的關(guān)系。6) 在處理4)和5)過程中首先建立事物,中間有任何異常都需要做數(shù)據(jù)庫回滾操作并返回異常。5) 如果是多表多對多關(guān)系,則先建立一張臨時(shí)虛表,該表的記錄為這多張表的主鍵形成迪卡爾積。所以對于單表關(guān)系直接映射即可。2) 分析這幾張表或視圖之間的關(guān)系。中間件需要按照一定的規(guī)則來確定對多個(gè)異構(gòu)數(shù)據(jù)庫的操作。圖43 多表多對多 映射算法總結(jié)由于系統(tǒng)是通過中間件來間接訪問數(shù)據(jù)庫系統(tǒng),當(dāng)系統(tǒng)因某種業(yè)務(wù)需要特定的數(shù)據(jù)記錄時(shí),中間件就會(huì)按照要求從異構(gòu)數(shù)據(jù)庫系統(tǒng)的返還特定的數(shù)據(jù)。這中策略稱為“l(fā)azy load”,即延遲加載[38],即在運(yùn)行時(shí)環(huán)境需要用到該數(shù)據(jù)時(shí)才加載該數(shù)據(jù)。那么在處理關(guān)系型數(shù)據(jù)庫的n:m的問題上,我們可以以主鍵來標(biāo)志數(shù)據(jù)記錄,其他數(shù)據(jù)項(xiàng)不寫人笛卡爾積里面,這樣既表達(dá)了多表多對多的關(guān)系又使得系統(tǒng)的開銷比較小。因?yàn)楦鶕?jù)笛卡爾積n:m的關(guān)系,將產(chǎn)生的記錄是n*m條,且每條記錄包含有n方和m方的完整信息(也就是各字段的屬性對應(yīng)的值)。圖42 顧客訂單表 多表多對多映射關(guān)系模型中還存在n:m的關(guān)系。如圖42所示,Customers是1方也就是父記錄,而customerOrderItem是n方法也就是子記錄。直接調(diào)用屬性的值toString方法即可。如圖41所示,數(shù)據(jù)表customerorder作為一個(gè)關(guān)系,以orderid為主鍵,orderdate和customerid為屬性。 單表映射映射算法分為單表和多表。第三范式指的是數(shù)據(jù)表中,任意一個(gè)非主屬性完全函數(shù)依賴于碼,且屬性之間不存在依賴傳遞[36]。 將JSON轉(zhuǎn)化為關(guān)系數(shù)據(jù)庫的數(shù)據(jù)對于關(guān)系型數(shù)據(jù)庫,它的關(guān)系應(yīng)當(dāng)滿足一定的要求,依據(jù)滿足關(guān)系的程度的不同分為1NF、2NF、3NF、BCNF、4NF、5NF,第一范式(1NF)要求最低,第五范式(5NF)要求最高[35]。正由于JSON的屬性的值可以是JSON的特點(diǎn),所以他滿足了關(guān)系型數(shù)據(jù)庫中的關(guān)聯(lián)關(guān)系。其中完成一個(gè)屬性的寫入JSON以后,往插入“;”,以作分隔。如果屬性是基本類型,則直接往s的末尾添加屬性名稱,再添加“:”,最后添加屬性的值。而將Java對象轉(zhuǎn)換成JSON是非常容易的。第二步驟在第3章第4節(jié)第4小節(jié)已經(jīng)做了分析和實(shí)現(xiàn)。其轉(zhuǎn)化過程分為以下兩個(gè)步驟:1) 首先將關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)轉(zhuǎn)換成ORM模型的中POJO[33];2) 然后將POJO轉(zhuǎn)化為JSON。與之不同,基于數(shù)據(jù)庫模型的JSON映射方法雖然復(fù)雜些[32],卻可以滿足關(guān)系型數(shù)據(jù)庫的各種可能的情況。4) 封裝JSON。2) 獲取Class對象的屬性域,得到一個(gè)字符串?dāng)?shù)組,其內(nèi)容為屬性名稱構(gòu)成的字符串。Java語言作為一種動(dòng)態(tài)語言,它提供了反射機(jī)制(reflection),通過POJO類的Class對象[30],我們可以知道這個(gè)POJO類有哪些屬性,知道了POJO有哪些屬性也就知道了數(shù)據(jù)庫對應(yīng)的表有哪些字段,然后可以繼續(xù)通過Class對象的get方法[31],然后依次調(diào)用所有的get方法即可組裝JSON。也可以通過Java語言中的POJO類實(shí)例化后的對象,來獲取數(shù)據(jù)庫對應(yīng)的的記錄信息。其person指的是數(shù)據(jù)表的名字,id表示的是主鍵,properties指的是常規(guī)屬性。ORM框架如下的配置文件如下,他們說明了數(shù)據(jù)表的主鍵、各個(gè)字段,并其將其與POJO的屬性作來對應(yīng),同時(shí)也指出了其數(shù)據(jù)類型。在使用Hibernate、MyBatis這樣的ORM框架時(shí),他們都會(huì)使用ORM配置文件,用來建立數(shù)據(jù)庫的數(shù)據(jù)表和POJO類的詳細(xì)映射。數(shù)據(jù)庫模型體現(xiàn)在很多方面,如POJO對象的反射信息,Hibernate的hbm配置文件。關(guān)系數(shù)據(jù)庫的模型信息主要有兩類:數(shù)據(jù)表的信息和POJO對象的屬性的。這樣外不系統(tǒng)都可以通過這4個(gè)統(tǒng)一的接口來實(shí)現(xiàn)對象Author數(shù)據(jù)表的CURD操作了。該接口返回的就是該SQL語句執(zhí)行完畢后得到的記錄所轉(zhuǎn)換成的SQL。 基于模板的映射方法這種方法的核心思想是定義統(tǒng)一的對外訪問數(shù)據(jù)庫系統(tǒng)的接口。 JSON與異構(gòu)數(shù)據(jù)庫的映射技術(shù)以關(guān)系模型為理論基礎(chǔ)的關(guān)系型數(shù)據(jù)庫與結(jié)構(gòu)化的數(shù)據(jù)類型JSON怎樣關(guān)聯(lián)映射起來是本文要做的重點(diǎn)工作,是關(guān)乎本文的成敗關(guān)鍵。因?yàn)閃eb應(yīng)用需要給瀏覽器端返回的正是JSON。5)易交互。4) 跨平臺(tái)?,F(xiàn)在幾乎所以的語句都支持JSON,都有相應(yīng)的生成和解析工具。而數(shù)據(jù)庫的數(shù)據(jù)表一般都是有業(yè)務(wù)意義的,所以JSON的可讀性很強(qiáng),一目了然。2) 語義明確。JSON有如下優(yōu)點(diǎn):1) 結(jié)構(gòu)嚴(yán)格。思路是建立異構(gòu)數(shù)據(jù)庫的數(shù)據(jù)表與JSON之間的映射聯(lián)系,然后異構(gòu)數(shù)據(jù)可以輕松的發(fā)布為JSON文本,然后數(shù)據(jù)接收端再按照J(rèn)SON的語法規(guī)則解析,這樣就實(shí)現(xiàn)了異構(gòu)數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)交換了。所以采用Java平臺(tái)作為中間件的平臺(tái),并采用JSON作為數(shù)據(jù)交換格式,在此基礎(chǔ)上實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫整合中間件[29]。 JSON與異構(gòu)數(shù)據(jù)庫整合系統(tǒng)設(shè)計(jì)JSON作為與平臺(tái)、語言無關(guān)的數(shù)據(jù)格式,它為異構(gòu)數(shù)據(jù)庫系統(tǒng)的整合提供標(biāo)準(zhǔn)的格式?;谀P偷挠成渲甘牵寒?dāng)把數(shù)據(jù)從數(shù)據(jù)庫寫成JSON文本或是把數(shù)據(jù)從JSON傳送到數(shù)據(jù)庫時(shí),既用到內(nèi)嵌SQL命令也用到具體的模型。建立關(guān)系型數(shù)據(jù)庫的表的記錄與JSON文本之間的映射關(guān)系是本文成敗的關(guān)鍵,只有建立了完善的映射關(guān)系才算是真正意義上實(shí)現(xiàn)了功能。而這一點(diǎn)是可行的,因?yàn)檫\(yùn)行中的系統(tǒng),數(shù)據(jù)庫表結(jié)構(gòu)相對固定,所以將數(shù)據(jù)庫表信息寫到相對固定的配置可以滿足運(yùn)行是需要。一方面,程序需要知道數(shù)據(jù)表結(jié)構(gòu)才能將數(shù)據(jù)轉(zhuǎn)換為JSON;另一方面,程序只有在知道表結(jié)構(gòu)的前提下才能將JSON轉(zhuǎn)換為POJO,進(jìn)而將POJO與數(shù)據(jù)庫記錄對應(yīng)。第4章 異構(gòu)數(shù)據(jù)庫與JSON的映射研究第4章 異構(gòu)數(shù)據(jù)庫與JSON的映射研究如果能夠?qū)崿F(xiàn)JSON文本與關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)之間的交互,那么這就完成了絕大部分工作。然后研究了JSON與Java語言的POJO的相互轉(zhuǎn)化,研究了具體實(shí)現(xiàn)。圖39 JSON融入ORM示意圖 本章小結(jié)本章根據(jù)JSON的語法特點(diǎn)研究了JSON的解碼。因?yàn)镴SON與POJO是一對一的映射關(guān)系,而POJO作為ORM的Object與數(shù)據(jù)庫的記錄也是一對一的關(guān)系。在這種情況下,ORM模型派上用場了,它是銜接關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)和JVM運(yùn)行時(shí)環(huán)境中對象的橋梁,如圖38所示:圖38 ORM模型示意圖現(xiàn)代數(shù)據(jù)庫應(yīng)用開發(fā)不可避免的要使用ORM,將數(shù)據(jù)庫中每張數(shù)據(jù)表用一個(gè)類來表示,而數(shù)據(jù)表的每一項(xiàng)則是對象,比如像Hibernate、MyBatis這樣的框架中。而在關(guān)系型數(shù)據(jù)庫中,關(guān)系型數(shù)據(jù)庫無法直接表達(dá)多對多持有(關(guān)聯(lián))和繼承關(guān)系。而現(xiàn)在大多數(shù)企業(yè)都采用關(guān)系型數(shù)據(jù)庫來持久化業(yè)務(wù)數(shù)據(jù),關(guān)系數(shù)據(jù)和對象是企業(yè)級應(yīng)用中業(yè)務(wù)實(shí)體的兩種表現(xiàn)形式[23],業(yè)務(wù)實(shí)體在JVM運(yùn)行時(shí)環(huán)境中以對象的形式存在,在關(guān)系型數(shù)據(jù)庫中表現(xiàn)的表現(xiàn)形式為關(guān)系數(shù)據(jù)。 將JSON融入ORM對象關(guān)系映射模型(Object/Relation Mapping,簡稱ORM),是跟著現(xiàn)代面向?qū)ο蟮挠?jì)算機(jī)軟件開發(fā)方法發(fā)展而誕生的。 }} 將JSON轉(zhuǎn)化為POJOJSON作為文本,在Java里面就是字符串。 (map, map)。 (rice, )。 (meat, )。 (browsers, str)。 (initial, (0, 1).toUpperCase())。 JSONObject jObj = new JSONObject(json)。所以將POJO直接轉(zhuǎn)化為JSON是可行。顯然,其存和取方法本身不是我們需要的數(shù)據(jù),我們關(guān)心的是屬性,所以在將POJO轉(zhuǎn)化成JSON的過程中,重要的是得到屬性的名稱和該屬性對應(yīng)的值。那么有沒有可能將POJO對象直接轉(zhuǎn)換成JSON、JSON轉(zhuǎn)換成POJO對象呢?答案是肯定的。 } }}Java反序列化過程如下:1)創(chuàng)建文件FileOutputStream類型的文件fos;2)創(chuàng)建一個(gè)對象輸出流ObjectInputStream類型的對象ois = new ObjectIutputStream(fos);4)從ois里讀取obj,(),獲得對象obj;5)關(guān)閉ois;可以看到Java里面的序列化與反序列化過程實(shí)際上與JSON的賦值和eavl是一致的。 ()。 ObjectOutputStream oos = new ObjectOutputStream(fos)。 (MadGecko)。 } public static void main(String[] arr) { Student stu = new Student()。 public void setNumber(int number) { = number。public class Student { private int number。Java序列話過程如下:1) 創(chuàng)建文件FileOutputStream類型的文件fos;2) 創(chuàng)建ObjectOutputStream類型的對象oos = new ObjectOutputStream(fos);3) 獲得對象obj;4) 向oos里持久化obj,(obj);5) 關(guān)閉oos;其中4)步驟的過程就是將POJO類對象的主要屬性(不包含方法)寫入到文件中。POJO對象序列化以后,就意味著可以將序列化
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1