Code Generate of Power Designer
本文档是通过PowerDesigner自动生成Entity的一个功能实现说明文档.
通过PowerDesigner来自动生成Entity个人感觉是非常实用的,可以实现Entity的属性定义,get set 方法,类的继承以及接口实现,以JPA的
形式实现与数据库的字段映射和表之间的关联关系映射.通过该功能大家基本上可以从手写Entity的工作中解脱出来,而且通过PowerDesigner来自动生
成Model也肯定会比手动来完成Entity效率上要高一些.
实现目的和效果都说了,接下来让我们一下看看具体该如何实现?
首先介绍下PowerDesigner几种模型.
PowerDesigner共有4种模型:概念数据模型 (CDM)物理数据模型 (PDM) 面向对象模型 (OOM) 业务程序模型 (BPM)
在这里我们需要做的是,先创建PDM,通过PowerDesigner的 Tools -> Generate Object-Oriented Model操作来自动生成OOM.也可以跳 过第一步,直接手动创建OOM.最后的Entity就是通过OOM来实现的.
通过PDM生成OOM
在这里我把生成过程中需要设置和注意的地方做下简单说明.
前面讲过生成是通过PowerDesigner的 Tools -> Generate Object-Oriented Model操作来完成的.该操作点击进入后是OOM Generation Options界面.里面是两个单选框,一个是创建新的OOM 另一个是修改已经存在的OOM,在这里我们选择创建一个新的OOM如下图:
在Object Language选项中是PowerDesigner在代码生成时支持的语言种类.其中java是两个选项,一个是java 另一个是java5.0,两个任意选择一个都可以,如果需要用到java的注解特性那么就选择java5.0,在PowerDesigner12是支持注解的.这里我们选择java,接下来的两个选项在实际使用时没有发现太大的区别,任选一个吧.下面把Name和Code填写成项目的名称和版本就可以了.接下来点击界面上方的Detail选项,里面有四个选项,分别是Check Model,Save generation dependencies,O/R Mapping,Convent names into codes.Check Model 默认是打勾的,它在生成OOM时会对模型的格式进行检测.如果PDM有错误的地方在下方Check Model控制台中会有错误提示信息.后面三个选项除了O/R Mapping 不选外其他的都选上,O/R Mapping是在生成hibernate Mapping文件时需要设置的.现在生成OOM的基本设置就完成了.点确定就会自动生成OOM.
通过OOM生成Entity
我们点开已经生成好的模型,里面有很多设置选项,主要包括属性,方法,注释,关联关系等,我们可以通过查看如下图:
选项来查看代码生成的效果,从产生的效果中如果大家注意看可能会发现在关系属性上有
public YiwuUserRefRolePermission[] yiwuUserRefRolePermission;
这样的属性设置.出现数组的这中情况是由于我们生成的OOM中虽然保留了关联关系,但没有具体指明所用的集合,导致在1...*(1对多)关系上PowerDesigner找不到集合类而用数组来代替.解决的办法是我们点开模型之间的Association如下图:
里面的选项都是对关联属性做具体设置的.在下方有个Container Type选项,如下图:
这里就是要设置集合的地方.选择Set集合,下面会自动给出实现类HashSet?.这时在查看Preview选项里面的属性设置就能选择正确的集合类了.同时会产生默认的几个方法,有get set add remove 和获得Iterator的方法,这里有些是不需要的在后面我们会通过修改PowerDesigner的元模型来进行修改.其他还有很多选项都可以对生成Entity进行一些设置,但都不能完全满足我们的需要,所以我们选择对PowerDesigner的原模型进行修改来实现满足要求的Entity. 打开菜单栏 Language -> Edit Current Object Language选项,如下图:
这个界面是扩展模型编辑窗口,点开Profile选项,里面列举的是PowerDesigner的元模型,其中所有元模型都继承于Classifier元模型,在该模型中的Templates里有Source模板,在选择生成java文件时执行的就是该模板,该模板也是对其他各模板的一个组合应用.模板中使用的语言是PD提供的GTL语言.生成Entity文件我们需要修改的模板有Class,Attribute,Association等,主要是为了完成添加JPA设置,get set 方法和关联关系的设置.
修改Attribute:
这个模板是对基础属性进行的设置,如注释,变量可见度等. 首先修改Attribute -> Templates -> definition模板修改为 如下图:
修改的作用是设置属性的可见度,类型的转换和添加
@Property(Property.Source.Page)
这里的设置只能设置OOM中的基础属性,通过关联关系产生的对象属性需要在Association中进行设置.添加get set 方法,在Attribute -> Templates中添加两个方法 getterFunction 如下图:
setterFunction 如下图:
这两个方法将在修改Class的时候使用到.
修改Class:
这个模板主要是对类的一系列设置,如注释,继承关系和接口实现等. 修改的模板是Class -> Templates -> definition模板修改为 如下图:
其中上部分是通过JPA完成与数据库映射的一些设置,粘贴上去就可以了,然后把需要的变量做下修改.在最下面是对Attribute里的getterFunction和 setterFunction方法的调用.由于里面使用的变量是属于Attribute这个域的,所以在这里对Attributes(Class 的默认属性)集合进行循环就可以得到所有属性来实现get set 方法.由于Entity有继承关系的存在.所以对Templates ->extends模板也做些修改,修改后如下图:
只是简单的添加了else语句和把父类的名称加了进去.
修改Association:
这个模板是针对类之间关系的设置,其中包括:关联对象的get set 方法,JPA的设置等.
修改的模板是Association -> Templates -> Helpers -> Migrate -> accessorsMany模板,如下图:
这个模板是针对关联中需要使用集合的属性的设置模板.默认设置是包括,add,remove,Iterator方法,由于项目中并不需要这些.所以一并删除,然后对get set 进行修改来满足项目需要.
另一个需要修改的模板是Association -> Templates->Helpers ->Migrate ->accessorsOne模板 如下图:
这个模板刚好和上面的模板相反,来设置除集合外的对象关系属性.
通过上述对主要部分的修改,最终基本可以满足项目需要的Entity如下图:
希望本文档能给大家一些启发.有错误的地方请告诉我,好及时修改.修改后的模板文件配置java.xol
建议,下载java.oxl 然后保存文件到下面目录:Sybase\PowerDesigner 12\Resource Files\Object Languages\命名 java_infowarelab.oxl,用记事本打开找到
<?PowerDesigner AppLocale="UTF16"Code="Java"Family="Java"Name="Java_infowarelab"
SubFamily="J2EE"signature="XOL_XML"version="12.0.0.1700"?>
修改name属性为任何你想要的就可以了
然后pd总选择language->change current object language->浏览你新命名的模版就可以了。