http://www.oschina.net/question/157182_41697
使用OpenJWeb(RAD) Java快速开发平台定制功能的完整过程示例
王保政
QQ:29803446
通过OpenJWeb快速开发平台已可以实现由用户自己定义表结构,并在平台中动态生成增删改查页面,在具体项目的开发中,可以利用此平台快速生成表结构及增删改查页面。此平台能根据表结构自动创建hibernate映射文件,Java POJO类等。
具体操作过程如下:
(一) 定义数据库表
用户可利用此快速开发平台来创建数据库表,为了操作的方便性,用户不需要为表设置主键,平台可以自动创建一个主键字段,另外建表时平台会自动添加创建时间、创建人、最后修改时间、最后修改人、唯一行号、排序字段等。
下面以商品基本信息维护为例,来讲解通过平台生成增删改查功能的具体过程:
首先定义一个库存商品基本信息表(inv_pro):
(1) 选择平台开发—表基本信息维护功能,在列表页面中点新增:
在新增页面中填入以下信息:
注意实体类名的命名规则,前缀必须是org.apache.easframework.core.entity.
后面的类名的命名规则为针对表名inv_pro,将首字母改为大写,下划线去掉,下划线后的首字母大写,所以inv_pro对应的实体类名为:org.apache.easframework.core.entity.InvPro。
填写完后保存。
(1) 进入表字段基本信息维护功能,增加inv_pro表的字段定义:
点新增:
在新增页面中录入一个商品名称字段:
说明:字段长度不能为空,否则建表失败,上面的字段长度填写为30(不想重新截图了)
字段名的规则:小写英文字母,中间可有下划线,末尾不能有下划线,首字母必须为英文。
类属性名的命名规则:将字段名的下划线去掉,下划线后的首字母改为大写。
是否查询条件列被选中,可以在列表页面的查询下拉框中显示此字段。
是否在列表页面展示被选中,则生成列表页面中将显示此字段。
是否在编辑页面显示,则在编辑页面中可维护此字段。
设置完后保存,继续添加pro_code(字符串类型),pro_unit_price(小数类型),min_stock_qty(最低库存量,整数类型),pro_unit_id基本计量单位(从数据字典取值)页面分别为:
说明:字段长度不能为空,否则建表失败,上面的字段长度填写为30(不想重新截图了)
说明:字段长度不能为空,否则建表失败,上面的字段长度填写为10,小数位数为2
说明:字段长度不能为空,否则建表失败,上面的字段长度填写为10
说明:字段长度不能为空,否则建表失败,上面的字段长度填写为16(不想重新截图了)
由于计量单位为从数据字典取值,所以输入方式应为下拉选择框,数据字典类型对应物品计量单位编码。
以上定义完了inv_pro表的各字段,现在再进入表基本信息维护,在页面中找到inv_pro记录,选中此记录,点生成库表按钮:
这是检查数据库,可以看到生成了inv_pro表:
数据库自动创建了create_dt,create_uid,update_dt,update_uid,row_id,sort_no,obj_id字段,在表字段基本信息维护中,可看到平台自动添加了这些字段的声明:
平台还生成了什么内容?
(1) InvPro.hbm.xml Hibernate映射文件,见D:/easdev/project01/src/001core/src/java/org/apache/easframework/core/entity/ InvPro.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Mapping file autogenerated by OpenJWeb - Hibernate Tools
-->
<hibernate-mapping>
<class name="org.apache.easframework.core.entity.InvPro" table="inv_pro">
<id name="objId" type="java.lang.String">
<column name="obj_id" length="40" />
<generator class="assigned" />
</id>
<property name="updateDt" type="java.lang.String">
<column name="update_dt" length="23" />
</property>
<property name="proCode" type="java.lang.String">
<column name="pro_code" length="30" />
</property>
<property name="proUnitId" type="java.lang.String">
<column name="pro_unit_id" length="16" />
</property>
<property name="minStockQty" type="java.lang.Long">
<column name="min_stock_qty" />
</property>
<property name="sortNo" type="java.lang.Long">
<column name="sort_no" />
</property>
<property name="proName" type="java.lang.String">
<column name="pro_name" length="30" />
</property>
<property name="rowId" type="java.lang.String">
<column name="row_id" length="40" />
</property>
<property name="updateUid" type="java.lang.String">
<column name="update_uid" length="40" />
</property>
<property name="createUid" type="java.lang.String">
<column name="create_uid" length="40" />
</property>
<property name="proUnitPrice" type="java.lang.Double">
<column name="pro_unit_price" precision="10" />
</property>
<property name="createDt" type="java.lang.String">
<column name="create_dt" length="23" />
</property>
</class>
</hibernate-mapping>
(2) 此目录下同时生成了InvPro.java:
package org.apache.easframework.core.entity;
/**
This POJO generated by OpenJWeb - Hibernate Tools
*/
public class InvPro extends org.apache.easframework.core.entity.AbstractEntity implements java.io.Serializable {
// Fields
private String updateDt;
private String proCode;
private String proUnitId;
private Long minStockQty;
private Long sortNo;
private String proName;
private String rowId;
private String updateUid;
private String objId;
private String createUid;
private Double proUnitPrice;
private String createDt;
public InvPro() { }
public String getUpdateDt() {
return this.updateDt;
}
public void setUpdateDt(String updateDt) {
this.updateDt = updateDt;
}
public String getProCode() {
return this.proCode;
}
public void setProCode(String proCode) {
this.proCode = proCode;
}
public String getProUnitId() {
return this.proUnitId;
}
public void setProUnitId(String proUnitId) {
this.proUnitId = proUnitId;
}
public Long getMinStockQty() {
return this.minStockQty;
}
public void setMinStockQty(Long minStockQty) {
this.minStockQty = minStockQty;
}
public Long getSortNo() {
return this.sortNo;
}
public void setSortNo(Long sortNo) {
this.sortNo = sortNo;
}
public String getProName() {
return this.proName;
}
public void setProName(String proName) {
this.proName = proName;
}
public String getRowId() {
return this.rowId;
}
public void setRowId(String rowId) {
this.rowId = rowId;
}
public String getUpdateUid() {
return this.updateUid;
}
public void setUpdateUid(String updateUid) {
this.updateUid = updateUid;
}
public String getObjId() {
return this.objId;
}
public void setObjId(String objId) {
this.objId = objId;
}
public String getCreateUid() {
return this.createUid;
}
public void setCreateUid(String createUid) {
this.createUid = createUid;
}
public Double getProUnitPrice() {
return this.proUnitPrice;
}
public void setProUnitPrice(Double proUnitPrice) {
this.proUnitPrice = proUnitPrice;
}
public String getCreateDt() {
return this.createDt;
}
public void setCreateDt(String createDt) {
this.createDt = createDt;
}
}
(3) 在EntityContainer.java中增加了InvPro的声明:
private InvPro invPro;
public void setInvPro(InvPro entity)
{
this.invPro = entity;
}
public InvPro getInvPro()
{
return this.invPro;
}
(4) D:/easdev/project01/src/001core/src/java中的dataSource.xml中增加了InvPro.hbm.xml的声明:
<value>org/apache/easframework/core/entity/InvPro.hbm.xml</value>
开始创建功能项,生成功能的增删改查页面:
(1)
点“新增”:
注意实体类选择上面定义的库存商品基本信息表,保存后回到列表页面,选择“商品基本信息维护”一行,点生成功能代码:
操作完成,系统提示“JSP文件已生成”,这时点确定后,查看D:/easdev/project01/src/001core/src/java/xwork.xml中增加了以下配置代码:
<action name="listInvPro" class="org.apache.easframework.core.webwork.action.BaseAction">
<result name="input">/module/platform/editInvPro.jsp</result>
<result name="success">/module/platform/listInvPro.jsp</result>
<result name="select">/listInvPro.action?operate=selectPageList</result>
<result name="edit">/module/platform/editInvPro.jsp</result>
<result name="showList">/module/platform/listInvPro.jsp</result>
<param name="serviceName">DBSupportService</param>
<param name="keyFieldName">objId</param>
<param name="entityClassName">org.apache.easframework.core.entity.InvPro</param>
<param name="codeColumns"></param>
<param name="sortColumns"></param>
<param name="titleBar">系统管理,商品维护,基本信息</param>
<param name="actionName">listInvPro</param>
<param name="editTitle">商品基本信息维护</param>
</action>
同时在D:/easdev/project01/src/001core/web/module/platform中生成了listInvPro.jsp和editInvPro.jsp文件,这时运行D:/easdev/build/ userbuild.bat,注意运行此编译脚本前把tomcat服务器关闭掉(否则在新增功能页面中录入数据保存后出现异常)。
提示运行成功后,切换到刚才的页面,在浏览器地址栏点刷新,在动态功能中生成一个商品基本信息维护,点此功能点,出现由平台生成的列表页面(右侧的页面为平台生成的页面):
点新增,进入编辑页面,录入下面信息保存:
至此实现了通过平台建立增删改查的完整过程,大家可以使用此新生成功能点的增删改查及分页的各种操作。
如果想删除生成的功能,需要删除相应的内容:
(1) 数据库表
(2) 生成的hibernate配置文件和对应的java类
(3) 在EntityContainer中去掉对应的实体声明
(4) Xwork.xml中删除对应的action
(5) Datasource.xml中删除对应的hbm.xml
(6) 表信息及字段基本信息维护中删除对应的记录。