新版本的AppFuse虽然实现的功能没有变,但实现方式的变化还是挺大的。
接下来让我们随着AppFuse的引导,一起学习最新的技术吧。
想要了解AppFuse的基本功能,我觉得最快的方法还是亲自做一做。以前的AppFuse有提供CRUD代码的自动生成功能,新版当然也不例外。
借用AppFuse网站中的例子,建立一个最简单的POJO。
importjavax.persistence.Entity; importjavax.persistence.GenerationType; importjavax.persistence.Id; importjavax.persistence.GeneratedValue; importjavax.persistence.Column; importorg.apache.commons.lang.builder.EqualsBuilder; importorg.apache.commons.lang.builder.HashCodeBuilder; importorg.apache.commons.lang.builder.ToStringBuilder;
@Entity publicclassPersonextendsBaseObject { privatestaticfinallongserialVersionUID= -2267205427831321488L; privateLongid; privateStringfirstName; privateStringlastName; @Id@GeneratedValue(strategy = GenerationType.AUTO) publicLong getId() { returnid; }
publicvoidsetId(Long id) { this.id= id; } @Column(name="first_name", length=50) publicString getFirstName() { returnfirstName; }
publicvoidsetFirstName(String firstName) { this.firstName= firstName; }
@Column(name="last_name", length=50) publicString getLastName() { returnlastName; }
publicvoidsetLastName(String lastName) { this.lastName= lastName; }
/** *@seejava.lang.Object#equals(Object) */ publicbooleanequals(Object object) { if(!(objectinstanceofPerson)) { returnfalse; } Person rhs = (Person) object; returnnewEqualsBuilder().append(this.firstName, rhs.firstName) .append(this.id, rhs.id).append(this.lastName, rhs.lastName) .isEquals(); }
/** *@seejava.lang.Object#hashCode() */ publicinthashCode() { returnnewHashCodeBuilder(248915313, 1539783955) .append(this.firstName).append(this.id).append(this.lastName) .toHashCode(); }
/** *@seejava.lang.Object#toString() */ publicString toString() { returnnewToStringBuilder(this).append("lastName",this.lastName) .append("id",this.id).append("firstName",this.firstName) .toString(); } } |
接下来根据这个POJO生成CRUD代码。
在命令行下运行mvn appfuse:gen -Dentity=Person,这个POJO的CRUD代码即被生成,并自动添加到项目中。
接下来根据这个POJO生成数据表。
在命令行下运行mvn test-compile hibernate3:hbm2ddl。
然后找到/src/test/resources下的hibernate.cfg.xml文件,添加<mapping class="com.mycompany.app.model.Person"/>
最后运行mvn jetty:run-war,可以通过http://localhost:8080看到我们新添加的person了。
在/target/appfuse/generated-sources里有所有Person的自动生成的代码,通过查看这些文件,我们可以了解到AppFuse里实现一张表的CRUD需要多少个文件。熟悉AppFuse1.x的人也可以比较一下两个版本实现方式的区别。
下面就是/target/appfuse/generated-sources里的所有文件,我们来研究一下。
src/test/resources/Person-sample-data.xml 可以配置初始数据的文件,添加到sample-data.xml
src/test/resources/Person-web-tests.xml jsp的单元测试配置文件
src/test/java/com/mycompany/app/webapp/action/PersonActionTest.java Action的单元测试文件
src/main/resources/Person-generic-beans.xml 添加到applicationContext.xml
src/main/resources/PersonManager-bean.xml 无用
src/main/resources/Person-struts.xml 添加到src/main/resources/struts.xml中
src/main/resources/Person-ApplicationResources.properties 资源文件,添加到src/main/resources/ApplicationResources.properties
src/main/resources/com/mycompany/app/model/Person-validation.xml这个在1.x里是自动生成的,现在需要自己去改。
src/main/resources/com/mycompany/app/webapp/action/PersonAction-validation.xml Action的validation
src/main/java/com/mycompany/app/webapp/action/PersonAction.java Ation
src/main/webapp/WEB-INF/Person-struts-bean.xml 可以添加到applicationContext-struts.xml中,也可以不添加,区别就是struts.xml中Action的声明方式有点变化。
src/main/webapp/WEB-INF/Person-menu-config.xml 用于配置菜单项,添加到src/main/webapp/WEB-INF/menu-config.xml 菜单配置文件
src/main/webapp/common/Person-menu.jsp 菜单显示jsp
文章出自:http://blog.csdn.net/clearwater21cn/article/details/2748118