Code Generate of Power Designer[转]
Code Generate of Power Designer
Code Generate of Power Designer
說(shuō)明
本文檔是通過(guò)PowerDesigner自動(dòng)生成Entity的一個(gè)功能實(shí)現(xiàn)說(shuō)明文檔.
通過(guò)PowerDesigner來(lái)自動(dòng)生成Entity個(gè)人感覺(jué)是非常實(shí)用的,可以實(shí)現(xiàn)Entity的屬性定義,get set?方法,類(lèi)的繼承以及接口實(shí)現(xiàn),以JPA的
形式實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的字段映射和表之間的關(guān)聯(lián)關(guān)系映射.通過(guò)該功能大家基本上可以從手寫(xiě)Entity的工作中解脫出來(lái),而且通過(guò)PowerDesigner來(lái)自動(dòng)生
成Model也肯定會(huì)比手動(dòng)來(lái)完成Entity效率上要高一些.
實(shí)現(xiàn)目的和效果都說(shuō)了,接下來(lái)讓我們一下看看具體該如何實(shí)現(xiàn)?
功能實(shí)現(xiàn)
首先介紹下PowerDesigner幾種模型.
PowerDesigner共有4種模型:概念數(shù)據(jù)模型?(CDM)物理數(shù)據(jù)模型?(PDM)?面向?qū)ο竽P?/span>?(OOM)?業(yè)務(wù)程序模型?(BPM)
在這里我們需要做的是,先創(chuàng)建PDM,通過(guò)PowerDesigner的?Tools -> Generate Object-Oriented Model操作來(lái)自動(dòng)生成OOM.也可以跳?過(guò)第一步,直接手動(dòng)創(chuàng)建OOM.最后的Entity就是通過(guò)OOM來(lái)實(shí)現(xiàn)的.
通過(guò)PDM生成OOM
在這里我把生成過(guò)程中需要設(shè)置和注意的地方做下簡(jiǎn)單說(shuō)明.
前面講過(guò)生成是通過(guò)PowerDesigner的?Tools -> Generate Object-Oriented Model操作來(lái)完成的.該操作點(diǎn)擊進(jìn)入后是OOM Generation Options界面.里面是兩個(gè)單選框,一個(gè)是創(chuàng)建新的OOM?另一個(gè)是修改已經(jīng)存在的OOM,在這里我們選擇創(chuàng)建一個(gè)新的OOM如下圖:
在Object Language選項(xiàng)中是PowerDesigner在代碼生成時(shí)支持的語(yǔ)言種類(lèi).其中java是兩個(gè)選項(xiàng),一個(gè)是java?另一個(gè)是java5.0,兩個(gè)任意選擇一個(gè)都可以,如果需要用到java的注解特性那么就選擇java5.0,在PowerDesigner12是支持注解的.這里我們選擇java,接下來(lái)的兩個(gè)選項(xiàng)在實(shí)際使用時(shí)沒(méi)有發(fā)現(xiàn)太大的區(qū)別,任選一個(gè)吧.下面把Name和Code填寫(xiě)成項(xiàng)目的名稱(chēng)和版本就可以了.接下來(lái)點(diǎn)擊界面上方的Detail選項(xiàng),里面有四個(gè)選項(xiàng),分別是Check Model,Save generation dependencies,O/R Mapping,Convent names into codes.Check Model?默認(rèn)是打勾的,它在生成OOM時(shí)會(huì)對(duì)模型的格式進(jìn)行檢測(cè).如果PDM有錯(cuò)誤的地方在下方Check Model控制臺(tái)中會(huì)有錯(cuò)誤提示信息.后面三個(gè)選項(xiàng)除了O/R Mapping?不選外其他的都選上,O/R Mapping是在生成hibernate Mapping文件時(shí)需要設(shè)置的.現(xiàn)在生成OOM的基本設(shè)置就完成了.點(diǎn)確定就會(huì)自動(dòng)生成OOM.
通過(guò)OOM生成Entity
我們點(diǎn)開(kāi)已經(jīng)生成好的模型,里面有很多設(shè)置選項(xiàng),主要包括屬性,方法,注釋,關(guān)聯(lián)關(guān)系等,我們可以通過(guò)查看如下圖:
選項(xiàng)來(lái)查看代碼生成的效果,從產(chǎn)生的效果中如果大家注意看可能會(huì)發(fā)現(xiàn)在關(guān)系屬性上有
??public YiwuUserRefRolePermission[] yiwuUserRefRolePermission;
這樣的屬性設(shè)置.出現(xiàn)數(shù)組的這中情況是由于我們生成的OOM中雖然保留了關(guān)聯(lián)關(guān)系,但沒(méi)有具體指明所用的集合,導(dǎo)致在1...*(1對(duì)多)關(guān)系上PowerDesigner找不到集合類(lèi)而用數(shù)組來(lái)代替.解決的辦法是我們點(diǎn)開(kāi)模型之間的Association如下圖:
里面的選項(xiàng)都是對(duì)關(guān)聯(lián)屬性做具體設(shè)置的.在下方有個(gè)Container Type選項(xiàng),如下圖:
這里就是要設(shè)置集合的地方.選擇Set集合,下面會(huì)自動(dòng)給出實(shí)現(xiàn)類(lèi)HashSet?.這時(shí)在查看Preview選項(xiàng)里面的屬性設(shè)置就能選擇正確的集合類(lèi)了.同時(shí)會(huì)產(chǎn)生默認(rèn)的幾個(gè)方法,有get set add remove?和獲得Iterator的方法,這里有些是不需要的在后面我們會(huì)通過(guò)修改PowerDesigner的元模型來(lái)進(jìn)行修改.其他還有很多選項(xiàng)都可以對(duì)生成Entity進(jìn)行一些設(shè)置,但都不能完全滿足我們的需要,所以我們選擇對(duì)PowerDesigner的原模型進(jìn)行修改來(lái)實(shí)現(xiàn)滿足要求的Entity.?打開(kāi)菜單欄?Language -> Edit Current Object Language選項(xiàng),如下圖:
這個(gè)界面是擴(kuò)展模型編輯窗口,點(diǎn)開(kāi)Profile選項(xiàng),里面列舉的是PowerDesigner的元模型,其中所有元模型都繼承于Classifier元模型,在該模型中的Templates里有Source模板,在選擇生成java文件時(shí)執(zhí)行的就是該模板,該模板也是對(duì)其他各模板的一個(gè)組合應(yīng)用.模板中使用的語(yǔ)言是PD提供的GTL語(yǔ)言.生成Entity文件我們需要修改的模板有Class,Attribute,Association等,主要是為了完成添加JPA設(shè)置,get set?方法和關(guān)聯(lián)關(guān)系的設(shè)置.
修改Attribute:
這個(gè)模板是對(duì)基礎(chǔ)屬性進(jìn)行的設(shè)置,如注釋,變量可見(jiàn)度等.?首先修改Attribute -> Templates -> definition模板修改為?如下圖:
修改的作用是設(shè)置屬性的可見(jiàn)度,類(lèi)型的轉(zhuǎn)換和添加
@Property(Property.Source.Page)
這里的設(shè)置只能設(shè)置OOM中的基礎(chǔ)屬性,通過(guò)關(guān)聯(lián)關(guān)系產(chǎn)生的對(duì)象屬性需要在Association中進(jìn)行設(shè)置.添加get set?方法,在Attribute -> Templates中添加兩個(gè)方法?getterFunction?如下圖:
setterFunction?如下圖:
這兩個(gè)方法將在修改Class的時(shí)候使用到.
修改Class:
這個(gè)模板主要是對(duì)類(lèi)的一系列設(shè)置,如注釋,繼承關(guān)系和接口實(shí)現(xiàn)等.?修改的模板是Class -> Templates -> definition模板修改為?如下圖:
其中上部分是通過(guò)JPA完成與數(shù)據(jù)庫(kù)映射的一些設(shè)置,粘貼上去就可以了,然后把需要的變量做下修改.在最下面是對(duì)Attribute里的getterFunction和?setterFunction方法的調(diào)用.由于里面使用的變量是屬于Attribute這個(gè)域的,所以在這里對(duì)Attributes(Class?的默認(rèn)屬性)集合進(jìn)行循環(huán)就可以得到所有屬性來(lái)實(shí)現(xiàn)get set?方法.由于Entity有繼承關(guān)系的存在.所以對(duì)Templates ->extends模板也做些修改,修改后如下圖:
只是簡(jiǎn)單的添加了else語(yǔ)句和把父類(lèi)的名稱(chēng)加了進(jìn)去.
修改Association:
這個(gè)模板是針對(duì)類(lèi)之間關(guān)系的設(shè)置,其中包括:關(guān)聯(lián)對(duì)象的get set?方法,JPA的設(shè)置等.
修改的模板是Association -> Templates -> Helpers -> Migrate -> accessorsMany模板,如下圖:
這個(gè)模板是針對(duì)關(guān)聯(lián)中需要使用集合的屬性的設(shè)置模板.默認(rèn)設(shè)置是包括,add,remove,Iterator方法,由于項(xiàng)目中并不需要這些.所以一并刪除,然后對(duì)get set?進(jìn)行修改來(lái)滿足項(xiàng)目需要.
另一個(gè)需要修改的模板是Association -> Templates->Helpers ->Migrate ->accessorsOne模板?如下圖:
這個(gè)模板剛好和上面的模板相反,來(lái)設(shè)置除集合外的對(duì)象關(guān)系屬性.
總結(jié)
通過(guò)上述對(duì)主要部分的修改,最終基本可以滿足項(xiàng)目需要的Entity如下圖:
希望本文檔能給大家一些啟發(fā).有錯(cuò)誤的地方請(qǐng)告訴我,好及時(shí)修改.修改后的模板文件配置java.xol
模版配置文件的使用方法
建議,下載java.oxl?然后保存文件到下面目錄:Sybase\PowerDesigner?12\Resource Files\Object Languages\命名java_infowarelab.oxl,用記事本打開(kāi)找到
<?PowerDesigner AppLocale="UTF16"Code="Java"Family="Java"
SubFamily="J2EE"signature="XOL_XML"version="12.0.0.1700"?>
修改name屬性為任何你想要的就可以了
然后pd總選擇language->change current object language->瀏覽你新命名的模版就可以了。
轉(zhuǎn)載于:https://www.cnblogs.com/zhangzt/archive/2011/07/05/2098368.html
與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Code Generate of Power Designer[转]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: sicily 1034. Forest
- 下一篇: Hadoop 部署实例