欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
城市胡同: Hibernate代碼生成工具 設計全攻略


1.簡(jiǎn)述
Hibernate 是一個(gè)開(kāi)放源代碼的對象關(guān)系映射框架,它對JDBC進(jìn)行了輕量級的對象封裝,提供HQL查詢(xún)語(yǔ)言,使得Java程序員可以隨心所欲的使用對象編程思維來(lái)操 縱數據庫。使用Hibernate,必須為配置映射文件—ClassMapping File和Configuration File,現在市場(chǎng)上提供了諸多Hibernate代碼生成工具,比如:XDoclet,以及Hibernate官方自帶的sechmaExport工 具。然而它們都有如下的缺點(diǎn):僅提供一些基本的輸入模版,用戶(hù)仍需要時(shí)間進(jìn)行配置和修改;沒(méi)有提供自動(dòng)的持久類(lèi)以及InvokeBean的代碼生成;不支 持圖形界面;不支持對HibernateTestCase的代碼生成。

Hibernate工具具備以下特點(diǎn):
1. 根據UML生成的數據庫模型,自動(dòng)生成映射文件。
2. 根據UML產(chǎn)生Hibernate持久類(lèi)。
3. Hibernate模型檢驗。
4. 生成自動(dòng)測試代碼。
5. 與Eclipse集成

Hibernate 代碼生成工具采用基于PowerDeigner的模型擴展功能來(lái)實(shí)現Hibernate的代碼生成。 PowerDesigner(以下簡(jiǎn)稱(chēng)PD)是一款一流的數據庫建模工具(E-R模型設計、物理模型設計),同時(shí)它對UML、報表、XML、團隊開(kāi)發(fā)(知 識庫Repository)都支持的相當好,所有模型都可以正向、逆向的相互轉換。PD的模型是由它的元模型組成。簡(jiǎn)單的說(shuō),元模型就是組成模型的模型。 基于這些元模型,PD提供了一套GTL開(kāi)發(fā)語(yǔ)言,可以輕易地擴展出自己的代碼模版和流程,也可以對現有的語(yǔ)言模型進(jìn)行修改以適應需求;PD支持利用 VBScript來(lái)擴展語(yǔ)言、改變PD模型、模型檢測。對于Eclipse,PD也能做到快速的集成并可以利用JAVA語(yǔ)言來(lái)修改PD模型。


注:GTL可以說(shuō)是一種面向對象的腳本語(yǔ)言,它可以在不同的元模型上加以擴展,增加諸如:添加生成文件、原型、菜單、代碼模版、擴展屬性 等等功能,如圖1所示,將在后續部分詳細的闡述。由于元模型是面向對象的(比如所有的類(lèi)、接口等的元模型都繼承于Classifier元模型),即如果在 Classifier中擴展了一個(gè)功能,那么繼承它的模型均擁有這樣的功能和腳本,也可以覆蓋重寫(xiě)這樣的功能,以實(shí)現多態(tài)概念。


打開(kāi)擴展模型編輯窗口:選擇Model?Extended Model Definition,在彈出的窗口的Toolbar上選擇Import Extended Model Definition(倒數第二個(gè)按鈕)來(lái)加載已有的模型,也可以新建擴展模型(選擇Add Row按鈕,然后在表格中雙擊要編輯的模型的第一列即可彈出如圖1所示的界面)


為了讓讀者更好的了解PD的元模型概念,截取了Hibernate代碼生成工具所用到的元模型架構圖,如圖2所示。 讀者可以在PD的安裝目錄下找到:<PD安裝路徑>\Examples\MetaModel.oom,圖表存放在PdOOM下,名字為 Class Objects。
由于篇幅原因,會(huì )摘取典型的代碼和模型來(lái)講解如何設計Hibernate代碼生成工具。


Hibernate代碼生成的總體架構流程(活動(dòng)圖)


Hibernate自動(dòng)生成文件的原則是:
1) 子類(lèi)的映射信息掛在根類(lèi)的映射文件下(Root Class),即子類(lèi)將不獨立生成代碼
2) Value-Type類(lèi)以及沒(méi)有持久化的類(lèi),將不生成代碼。
3) 不為非類(lèi)對象生成代碼(比如接口等)

其中:
Check Models in Diagram: Hibernate模型檢測,判斷DomainModel是否符合Hibernate語(yǔ)法。如果出錯,PD將拋出錯誤提示信息(提供自動(dòng)糾錯的功能)
Generate Configuration File:選擇模型屬性(Model->Model Properties),用戶(hù)可以在Extended Attribute下設置配置信息,PD會(huì )根據配置信息生成Configuration File。
Get each class in Diagram:這是PD的機制,它會(huì )自動(dòng)獲取UML內的所有模型元素,并根據每個(gè)模型的擴展屬性(Profile\Generated File)的流程來(lái)生成代碼文件。
Generate Basic Mapping:類(lèi)的基本映射,它包含id,composite-id,propery等。
Get SubClass Style:子類(lèi)的映射,遞歸獲取。
Generate Join:當持久類(lèi)對應于多張表的映射時(shí),需要用Join來(lái)指明。
Generate Association Mapping:根據類(lèi)之間Association的類(lèi)型來(lái)判斷是哪種關(guān)連映射,本工具支持one-to-one,one-to-many,many- to-one,many-to-many(根據Association Properties的Detail標簽下的Multiplicity來(lái)設置),支持集合Array,Set,List,bag,idbag(根據 ContainType來(lái)設置)。
Get Java Code Information:擴展模型是基于現有的語(yǔ)言模型,即擴展模型能夠獲取語(yǔ)言模型的模版和各種設置,對于Hibernate的Java持久類(lèi),我們只 須在Java代碼下增加對應Attribute的Getter和Setter即可。%source%
Generate Invoke Bean: 生成Hibernate的CRUD函數。
Generate Test Case: Hibernate測試用例代碼,將生成的隨機數據來(lái)驗證Hibernate的正確性。
Generate Log4J: 生成Log4J的配置文件
Generate ANT build.xml: 當用戶(hù)在Generation Files下的Options中設置Ant為T(mén)rue,并配置了Ant的Lib的路徑,則Hibernate Tools會(huì )生成build.xml, 然后將會(huì )自動(dòng)運行Ant來(lái)測試Hibernate, 生成結果將會(huì )被Log4J存入日志。

2.技術(shù)要點(diǎn)
O/R Mapping
PD從8.0開(kāi)始,就不斷加強O/R Mapping,除了代碼模型的生成以外,PD也生成O/R Mapping的定義,諸如生成EJB CMP組件。用戶(hù)可以定義O/R Mapping來(lái)建立OOM與PDM之間的關(guān)系。
PD支持3種方式的O/R Mapping:
第一種是從類(lèi)圖轉換成數據模型之后由PD自動(dòng)建立連接(適用于自頂向下的設計過(guò)程);
第二種是從數據模型轉換成類(lèi)圖之后由PD自動(dòng)建立連接(適用于自下向上的設計過(guò)程);
第三種是建立類(lèi)圖和數據模型之后由用戶(hù)手動(dòng)建立(適用于同步設計或者是后期的修改)
建立過(guò)程:
第 一種:選擇類(lèi)圖,然后設計持久類(lèi)(POJO),完畢之后,選擇Tools->Generate Physical Data Model。在彈出的窗口中,選擇Detail標簽,選中O/R Mapping選項,即可。讀者可以選擇是更新現有的數據庫還是新建數據庫。
第二種:與第一種建立過(guò)程相似,只是換成在數據庫模型中選擇Generate Object-Oriented Model
第 三種:用戶(hù)必須首先建立DataSource,在左邊WorkSpace樹(shù)形目錄下找到類(lèi)文件,然后右擊選擇New\Data Source,在彈出的窗口的Models標簽中選擇 ,并選擇想與之關(guān)聯(lián)的數據庫模型。在類(lèi)模型中打開(kāi)類(lèi)屬性(雙擊要建立O/R Mapping的類(lèi)),選擇Mapping選項卡,點(diǎn)擊 按鈕添加剛才建立的DataSource。然后點(diǎn)擊 添加類(lèi)映射的數據表,即建立完畢。
用戶(hù)可以添加多張表,它表示一個(gè)類(lèi)可能對應多張表的映射,Hibernate的映射則應該用Join屬性來(lái)指明。
注:當用戶(hù)建立了ClassSource,PD會(huì )根據類(lèi)的屬性和表的字段自動(dòng)建立AttributeMapping,當然用戶(hù)也可以在A(yíng)ttributeMapping屬性頁(yè)下對其映射進(jìn)行修改。
大家知道,Hibernate的映射文件必須包含對表的表述(比如:column,property屬性等等),在PD中,通過(guò)元模型中的Mapping可以輕易地獲取對應的表信息。圖4是GTL中用到的O/R Mapping元模型。
O/R Mapping架構圖:

架構說(shuō)明:
1) Association:
在A(yíng)soociation 元模型中,可以通過(guò)Mappings來(lái)獲取AssociationMapping(即用戶(hù)在Mapping for下選擇的DataSource),每個(gè)AssociationMapping都會(huì )有SourceClassifiers,它是 AsoociationSource標簽內的映射集合,如圖5所示。SourceClassifiers集合中的元素,也就是數據模型中的 Reference元模型,如圖6所示。
由于PD可以在A(yíng)ssociation Mapping下添加數據模型中的其他Reference和Table,所以在做Hibernate代碼生成時(shí),采用了類(lèi)型判斷,以避免因類(lèi)型不匹配而造成的錯誤。



實(shí)現代碼(表映射):(注:附錄部分將介紹部分GTL語(yǔ)法)
.


實(shí)現代碼(referenceColumnHelper模版):


2) Class和Attribute
獲取數據庫模型的方法與Association類(lèi)似,在O/R Mapping中,ClassMapping的SourceFeature等價(jià)于數據表; AttributeMapping的SourceFeature等價(jià)于數據表中的列信息。圖7給出了在編寫(xiě)過(guò)程中使用到的數據庫元模型的架構圖。
實(shí)現代碼(獲取類(lèi)對應的表信息)


說(shuō)明:Mappings.First.ClassSources表明當前Data Source下的表集合
實(shí)現代碼(獲取Attribute對應的列信息)
例如:%AttributeMappings.First.SourceFeature.Code%
%AttributeMappings.First.SourceFeature%對應于圖7的Column元模型。


Extended Attribute
Hibernate 生成工具中對于映射文件,難免要遇到大量的選項讓用戶(hù)選擇或者輸入,這時(shí),我們就可以利用PD提供的Extended Attribute來(lái)擴展模型的屬性。對于UML模型,除了Dependency和Generalization,其余模型均有Extended Attribute來(lái)擴展。
設置Extended Attribute步驟:進(jìn)入擴展模型編輯窗口,在Profile下選擇一個(gè)元模型,然后右鍵選擇Extended Attribute, PD已提供了多種默認的選項(加括號的),當然用戶(hù)增加自己的Extended Attribute Type(在Profile下的shared目錄上按右鍵選擇Extended Attribute Type,然后在右邊可以設置列項內容以及默認值等等。設置完之后讀者就可以在模型的擴展屬性中引用到自定義的類(lèi)型),如圖8所示。在GTL中,可以用% 屬性名%引用到當前用戶(hù)的選擇值,也可以用%模版名%引用到GTL模版(讀者可以選擇模版并按F12跳轉)。


Check Model
考 慮,由于基于UML建立的DomainModel,對于Hibernate語(yǔ)法來(lái)說(shuō),難免有一些語(yǔ)法上的錯誤,比如:在兩個(gè)類(lèi)之間建立 Association,但對應的表之間卻沒(méi)有Reference,或者是有Reference卻沒(méi)有Joins下的Column,這時(shí)我們應該給出一個(gè) 錯誤警告,提示用戶(hù)檢查。
以剛才提到的AssociationCheck為例,將介紹如何實(shí)現用戶(hù)自定義的Check。
打開(kāi)Hibernate擴展模型,選中Profile\Association,右擊選中New\Custom Check。在右邊,讀者可以看到有四個(gè)選項卡,如圖9所示。


Check Script: 用于檢測模型,%Check%=true, 將不出現錯誤信息。
Autofix Script: 用于自動(dòng)修復模型錯誤,%Fix%=false, 表示不修復該錯誤。當PD監測到錯誤時(shí),用戶(hù)可以在錯誤上右鍵選擇Automatic Correction即可。對于自動(dòng)修復的錯誤,會(huì )在圖標右下角加上一個(gè)”+”號,如 ,表示PD以根據Autofix Script修復完成。
Global Script: 用于存放全局函數,在任何元模型的Check Model均可調用。
實(shí)現代碼
Check Script: 用于檢測Refence的建立正確與否。


注:PD會(huì )對每個(gè)模型進(jìn)行檢測(包括Package),所以如果讀者希望通過(guò)程序來(lái)控制該模型是否被檢測,只須在滿(mǎn)足條件的語(yǔ)法段內加上%Check% = True (表示驗證正確并跳過(guò))即可。

Persistent Class持久類(lèi)
對 于POJO的持久類(lèi),必須為其每個(gè)類(lèi)的屬性增加Getter和Setter函數。擴展模型是基于語(yǔ)言模型之上的,也就是說(shuō),語(yǔ)言模型中的模板等內容均可在 擴展模型中覆蓋和重寫(xiě)。所以,在Hibernate擴展模型中采用重載的方法,擴展了Java語(yǔ)言模型的代碼生成,保留了原先Java那部分代碼,并在擴 展模型中加上自己的Getter和Setter模版。
在Java語(yǔ)言模型中,代碼生成是依靠%source%模版來(lái)完成Java代碼的,同時(shí)有一 個(gè)%initializers%模版實(shí)現當完成Attribute之后的一些初始化工作,所以在相同位置(Class元模型)的地方重寫(xiě)了% initializers%模版,代碼如下:


在A(yíng)ttribute元模型中增加getterFunction 、setterFunction模版,代碼如下:

然后在Class元模型中增加持久類(lèi)的Generated Files,并在模版編輯框內輸入%source%即可。

Generated Files
PD 在每個(gè)元模型中提供了文件生成的功能。在Class元模型上右鍵選擇Generated Files。在右邊窗口中,在 File Name 下輸入生成后的文件名。由于Hibernate映射文件的文件名與類(lèi)名相同,故輸入%mappingFilename%,同時(shí)建立 mappingFilename 模版,并輸入%Code%.hbm.xml。
注:所有的元模型都繼承于NamedObject (NamedObject繼承于BaseObject),在NamedObject中存放了各種元模型的標準屬性,比如:模型名稱(chēng)(Name)、代碼名稱(chēng) (Code)、注釋、描述等等。所以,為了取到類(lèi)的名稱(chēng),就在類(lèi)元模型下輸入%Code%.hbm.xml,那么PD會(huì )根據代碼名稱(chēng)為每個(gè)類(lèi)建立相應的文 件(前提是該類(lèi)可以被生成,即已持久化)。

Model
Model元模型中主要實(shí)現對 Configuration Mapping的連接信息的配置,諸如,JDBC等。所用到的方法也就是Extended Attribute和Mapping代碼模版。由于篇幅原因,不一一列舉,讀者可以參考剛才所講,或者可以在PD安裝目錄下運行pdvbs11.chm來(lái) 獲取幫助。

Task
Task在代碼生成完畢之后被激活,然后PD會(huì )依次序執行選中的任務(wù)。 擴展了Hibernate模型,增加了ANT的Lib路徑,生成的目錄名稱(chēng)等等選項。在Generation\ Options下建立新的選項即可,類(lèi)似于Extended Attribute。調用Options選項時(shí),輸入如下代碼:%GenOptions.選項名% 即可獲取。
對于Task,希望能夠借助ANT 的build.xml配置進(jìn)行自動(dòng)測試。在PD中,JAVA語(yǔ)言模型已經(jīng)提供了ANT的build.xml的自動(dòng)生成并預留接口 (customExecuteTarget、customerProperties、customTaskDefs三個(gè)模版) ,目的為了能讓擴展模型來(lái)重載,有興趣的讀者可以查看Java語(yǔ)言模型(Language?Edit Current Object Language,瀏覽Java::Profile\Model\Templates\Ant\antTemplate)。

建立Task:
在Generation\Tasks上右鍵,選擇New。輸入Task Name(就是真正執行的顯示名),取名為Run Unit Test。在下面的表格中選擇已建立的Command,如果沒(méi)有建立,則可以在Commands上新建。
Run Unit Test Command代碼:


說(shuō)明:
.execute_command為宏命令,用于執行外部的程序。
.execute_command ‘(‘ <cmd> [‘,‘ <args> [‘,‘ <mode>]] ‘)‘
第一個(gè)參數為主命令,這里是CMD
第二個(gè)參數為主命令的參數,這里是/K ANT.BAT JUNIT
第二個(gè)參數為管道類(lèi)型,PD提供cmd_ShellExecute和cmd_PipeOutput兩種方式。前者采用獨立的進(jìn)程方式,后者將會(huì )阻塞PD直到任務(wù)完成,并且結果將顯示在PD的Output窗口內,如圖10所示。



3.結束語(yǔ)
PowerDesigner 是一款靈活性非常強的軟件建模工具,基于它的元模型,讀者可以隨心所欲的用不同語(yǔ)言 (GTL, VBScript, Java, C#等) 來(lái)設計出自己的代碼生成工具,甚至是語(yǔ)言模型、報表等等。本篇僅僅起到了一個(gè)拋磚引玉的作用,我相信,憑借著(zhù)領(lǐng)域中的經(jīng)驗,讀者一定也可以設計出更適合自 己的代碼生成工具,簡(jiǎn)化流程、降低成本、加快開(kāi)發(fā)。

附錄:
列舉了GTL的部分語(yǔ)法,讀者也可以參閱PD安裝目錄下的pdvbs11.chm文件或者Sybase官方網(wǎng)站。
1. 資源文件
讀者可以參考PD11的現有模型:
您 可以在安裝目錄下\ Resource Files\Extended Model Definitions找到現有的擴展模型;在安裝目錄下\ VB Scripts找到VBScript代碼;Ole Automation目錄下找到如何用JAVA,C#等其他語(yǔ)言來(lái)獲取元模型來(lái)做自己的代碼生成工具;Library目錄下找到語(yǔ)言模型。在 Printable Docs目錄下找到PDF文檔(建議參考Advanced User Documentation.PDF文檔)。
2. 語(yǔ)法
a. 設置變量

變量名必須用%來(lái)封裝,即%變量名%
全局變量

變量區域
簡(jiǎn)單的說(shuō),當區域建立后(比如,循環(huán),另一個(gè)模版等),在區域中調用區域外的變量,則需要用Outer.變量名來(lái)指明。
b. 循環(huán)

c. 判斷條件

d. 集合

e. 特殊符號

 

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
使用 AppFuse 的七個(gè)理由
領(lǐng)域模型驅動(dòng)開(kāi)發(fā)利器
開(kāi)發(fā)無(wú)人編程即編程自動(dòng)化系統,讓程序員失業(yè)
DataUml Design 教程1-初識
談?wù)剆imulink自動(dòng)代碼生成
程序員眼中的UML(3)--類(lèi)圖,就是比你高一點(diǎn)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久