AppFuse还给我们提供或介绍了很多好用的工具,能大大加快我们的开发速度。如果能够很好的使用这些工具,我们可以只给出一个表的POJO,它们就能够自动生成所有的操作该POJO对应的数据表通常需要的增、删、改、查功能的模型层、控制层、视图层文件,几乎不用再修改就可以完成对这张表的所有基本操作。1. AppGen AppFuse给我们提供了一个通过xdoclet生成代码的工具——AppGen,我们来看看它怎么用。 POJO(Plain Old Java Object)代表一个存储在持久性存储器(如数据库)中的实体的对象视图。它通过hbm.xml配置文件与存储器中的数据相映射。 首先,你需要有这个表的POJO,放在src/dao/org/appfuse/model中。 在控制台中进入项目下的extras/appgen路径,键入ant -Dmodel.name=XXX -Dmodel.name.lowercase=xxx,第一个XXX处写你的POJO类名,第二个xxx处写这个对象在小写时的名字。当控制台出现BUILD SUCCESSFUL时,代码就生成了。代码在extras/appgen/build/gen文件夹下,包括java源代码(DAO、Service、Action)、单元测试、JSP、资源文件、xml配置文件、源数据等,目录结构与原项目一致,你只要把需要的目录拖到相应的项目根目录下就可以了,当然了,有的代码是需要在已有的文件上进行修改的,主要是属性文件和xml文件,这时需要你把新的代码手动转移到原来的文件中。 AppGen也可以为你省去这个麻烦,只要在前面的那段命令中加一个install,即ant install -Dmodel.name=XXX -Dmodel.name.lowercase=xxx,AppGen会直接把代码生成到你的项目中去,包括修改已存在的文件。这时为了保险起见,最好先备份一下代码。
2. xdoclet注释 AppGen生成的文件缺少了hbm.xml和Action Form Bean,难道我们要自己写吗?不是的。仔细察看build.xml文件就会发现实际上我们下载的AppFuse最初的源代码中并没有hbm.xml、FormBean,甚至连web.xml、struts-config.xml、validation.xml都没有,这些文件都是在我们执行ant setup时build.xml使用xdoclet自动生成的。 甚至连数据库和表、表里的数据也可以自动生成。奥秘都在POJO中。 查看User.java这个POJO你会发现里面除了java代码,还有很多注释,有@hibernate开头的,@struts开头的,这些都是xdoctlet的标签。我们大致讲解一下: @struts.form:用来生成Form Bean,如User.java中写了@struts.form include-all="true" extends="BaseForm",意思是该POJO中每一个属性在Form Bean中都要有,并且生成的Form Bean文件要继承BaseForm。如果不希望生成的FormBean包含POJO的所有属性,可以在相关的属性get方法前填写注释@struts.form-field,意思是该属性要在FormBean中生成。那么如果我们要在FormBean中添加一些POJO没有的属性或方法怎么做呢?打开metadata/web文件夹,可以看到有一个xdoclet-UserForm.java文件,里面是User.java在生成Form Bean时新加入的代码,我们同样可以把我们自己在FormBean中增加的代码新建到一个xdoclet-POJOFrom.java文件中就好了。 @struts.validator:用来生成validation.xml文件。最常用的如@struts.validator type="required",意为该属性在表单中需要有必填的验证。当然前提是这个属性也在FormBean中。validation还有一项配置是自定义的校验规则,使用正则表达式表示。metadata/web中有一个文件validation-global.xml,里面就有邮编等规则的配置。 @hibernate:这个是比较复杂的,用来生成hbm.xml文件。其实内容与hbm.xml基本一致,所以如果会写hbm.xml,这个也就会写了。初学者可以先建表,使用工具生成hbm.xml,再仿照生成的hbm.xml内容写这个标签。一旦标签写好了,不光可以生成hbm.xml,build.xml还可以自动在数据库中建表。 @struts.action/@struts.action-forward:POJO不能生成struts-config.xml,这个标签是要写到Action中的。如果使用AppGen生成Action,你会看到@struts.action已经写好了,这个标签的作用就是生成当前Action在struts-config.xml中的映射代码,写法与struts-config.xml中一致,其实就是把xml中的配置移植到Action中。还有一个问题,如果我们要在struts-config.xml中进行与Action无关的全局的配置,如global-forwards呢?浏览metadata/web文件夹你会发现里面有多个xml文件,其中以global和struts开头的文件就是写这些配置的。build.xml在setup时会自动将这些文件联合Action中的注释生成一个完整的struts-config.xml文件。 接下来还有web.xml文件,你一定猜到了同样需要在metadata/web中配置。除了刚才提到的那些xml文件,剩下的基本都是用于配置web.xml的了。我们自定义的filter和listener是有具体类的,所以我们同样可以在这些filter和listener类中添加注释,具体例子参考AppFuse中的filter吧,很简单的。 进行了所有配置后,运行ant setup,build.xml会根据POJO、Action等自动生成FormBean、hbm.xml、struts-config.xml、validation.xml、web.xml,并在数据库中创建相应的表。看起来可能有点复杂,但如无特殊要求,对数据表的增、删、改、查,只需要写好POJO,一切都可以搞定。3. Commonclipse org.appfuse.model中有一个抽象类BaseObject,定义了三个抽象方法:hashCode()、equals()和toString(),其中前两个是Hibernate要求POJO必须实现的方法。所有的POJO都继承自这个类,当然也要实现这三个方法,这个工具可以帮助你实现这三个方法。 我们可以使用Eclipse在线获得这个工具。步骤:依次点击"Help" -> "Software updates" -> "Find and Install" -> "Search for new features to install",点击"add update site",输入http://commonclipse.sourceforge.net,OK。 接下来需要对Commonclipse进行一些配置。点击"Window"->"Preferences",选择"Java",你会在菜单中看到Commonclipse。点击General标签,将复选框全部钩掉(全不选)。点击"OK"。 选中一个类,右击,你会在菜单中看到Commonclipse。选择要生成的方法,就这么简单。