无需编写Java代码就能生成增删改查功能的CZTZ-JavaEE平台介绍

无需编写Java代码就能生成增删改查功能的CZTZ-JavaEE平台介绍 

 

王保政

QQ:29803446

Msn:baozhengw999@hotmail.com

 

也许大家不会相信会有不用写Java代码就能生成增删改查功能的Java应用开发平台,但CZTZ-JavaEE Web快速开发平台的确实现了这一点。如果说中国应用软件的开发水平仍停留在手工作坊的时代,那么本平台的问世将至少可以否认这个观点。也许,中国应用软件的开发模式会因为此类平台的出现而有很大的变化----不懂编程的人员也可以通过平台定制自己的应用。项目的研发、实施周期大大缩短。不再有低水平的重复开发,软件组件的复用将会被发挥到极致。

从我个人的观点看,此平台的问世比SOA来说,更能给企业带来更大的实惠,如果没有一个快速开发平台为企业所用,除了高额的开发成本之外,还有漫长的开发周期,往往企业的应用还没开发完,业务已经发生了变化,一个后台增删改查的功能模块,如果让一个程序员不用平台自己开发的话,一般要至少花费2天时间,因为一个功能点就包括:查询列表、分页实现、排序实现、开发编辑页面、为有些字段开发从数据库检索出来的下拉列表,等等。

而通过本平台的定制功能,几分钟就可以设置好一个功能的参数,点一个按钮,程序就自动为你生成增删改查页面,这就是平台的强大之处!

下文介绍使用本平台定制一个增删改查页面的具体步骤。

定制增删改查页面的前提条件是,你所要操作的数据库表已经生成,而且对应的hibernatehbm.xml文件和实体类已经生成,另外需要在org.apache.easframework.core.entity. EntityContainer.java中声明此实体类,如:

private CmsBlog cmsBlog;

       public void setCmsBlog(CmsBlog entity)

       {

              this.cmsBlog = entity;

       }

      

       public CmsBlog getCmsBlog()

       {

              return this.cmsBlog;

       }

这就是要做的前提工作,(本平台对所有实体都使用了一个BaseAction进行控制,而不是一个实体对应一个action,减少了大量的代码)

接下来,打开D:/easdev/jakarta-tomcat- 5.0.30 /conf/server.xml,找到

<Context path="/system" docBase="D:/easdev/project01/src/001core/web"   debug="1" reloadable="false" crossContext="true">     

       <ResourceLink name="jdbc/mysql" global="jdbc/mysql" />

       <ResourceLink name="jdbc/shem" global="jdbc/shem" />

        

</Context>

reloadable=”false”中的false改为true,这样在定制功能时xwork.xml发生变化时,容易能自动重载配置文件。

下面以一个简单的表cms_blog为例:

在表字段基本信息维护功能中,定义此表的字段,下图是定义好了cms_blog字段的列表页面:

其中,blog_class字段被定义成了下拉列表的输入方式,此字段对应一个数据字典类型(本例选择了应用系统编号数据字典类型,用于测试生成的编辑页面是否为下拉形式),见下图:

在测试cms_blog的页面生成时,可以将编辑页面输入方式改为文本框、文本区域、checkbox分别测试一下,可以看出通过程序生成的编辑页面的blog_class字段的展现样式有相应的变化。

下面介绍如何生成cms_blog对应的功能页面:

选择功能树中的动态功能-功能菜单维护,点新增,在新增页面的实体类中选Blog信息表(博客)(注意不要选择其他的,因为其他表对应的JSP是平台已开发好的,实际使用时可以通过此功能来生成用户新定义的表),实际上对应的就是cms_blog,保存后返回列表页面,勾选新增加的记录,见下图:

点生成功能代码,生成完毕后在浏览器中刷新一下以在功能树上显示新增的功能,见下图:

点动态功能测试,进入生成出来的列表页面,见下图(动态生成出来的列表页面,此页面为module/platform/listCmsBlog.jsp,

选中一行,点修改,进入由程序生成出来的编辑页面(对应module/platform/editCmsBlog.jsp):

可以看到blog分类字段是下拉的输入方式,如果在表字段基本信息维护中定义此字段为文本框或checkbox,也会按照定义生成对应的输入样式,在这个页面上修改字段的值,保存。

以上是通过程序动态生成新的功能点的编辑页面和列表页面,可以看到新生成的功能包括了增删改查的完整实现。

除了动态生成了一个列表页和编辑页的JSP(生成过程中会保存同名文件,后缀加上.bak),另外Webworkxwork.xml的变化(在WEB-INF/classes下),程序自动添加了对应的action配置:

   <action name="listCmsBlog" class="org.apache.easframework.core.webwork.action.BaseAction">

           <result name="input">/module/platform/editCmsBlog.jsp</result>

           <result name="success">/module/platform/listCmsBlog.jsp</result>

           <result name="select">/listCmsBlog.action?operate=selectPageList</result>

           <result name="edit">/module/platform/editCmsBlog.jsp</result>

           <result name="showList">/module/platform/listCmsBlog.jsp</result>

           <param name="serviceName">DBSupportService</param>

           <param name="keyFieldName">objId</param>

           <param name="entityClassName">org.apache.easframework.core.entity.CmsBlog</param>

           <param name="codeColumns"></param>

           <param name="sortColumns"></param>

           <param name="titleBar">系统管理,平台开发,动态功能测试</param>

           <param name="actionName">listCmsBlog</param>

           <param name="editTitle">动态功能测试</param>

        </action>

       <!-- insert new action -->

注意不要更改<!-- insert new action -->行,因为程序通过此行识别插入点,切记!

 

<>

 

 

由《Ext JS源码分析与开发实例宝典》作者:彭仁夔团队开发而成 90%以上代码可以生成验证、生成三层代码生成完善的权限系统、生成数据库等功能 功能之强大用了就知道! 两年前,我负责指导Java方向实训,在最后评审准备过程,.Net组负责人要求Java和.Net的归结一起统一评审,Java指导老师们的第一反应是Java和.Net开始怎么能相提并论? 为什么不能并论?是因为Java开发阳春白雪?在我们的潜意识中,Java开发就是让程序员(学生)一行一行地编写代码编写HTML、CSS等,而.Net开发只要把控件拖到页面上即可,Java开发的效率一定比.Net低很多很多。 那么能不能提高Java的开发效率呢?作者经过分析并总结思考,发现业务系统有一定的共性所有操作,即增删改查,既然有共性,那么能不能抽象出来? 可以思考一下,通过继承、组件化等重用设计方式是可以抽象代码的共性,但是不同(实体)增删改查的内容是不同的,通过泛型也很难抽象出来的。如对于A的查询和对于B的查询都需要使用到SQL语句,怎么去剥离出来? 此时,我们就需要采用另外一种方式,把它们抽象出来更高层级的模板,然后把不同数据传入该模板的占位符,这样就变成不同的代码,这种方式就是代码生成技术。 在软件的设计过程中,代码生成及重用设计仿若陌路人,互相排斥。重用设计中很多的共性是不能抽象出来的,而一味追求生成,造成大量的雷同代码,是重用设计人员或真正开发人员最不能容忍的事件。 如果把它们两个结合起来,那就是完全不同的效果,首先通过重用设计抽象其能抽象的代码,其不能抽象的共性通过生成技术生成,开发效率就会成倍增加。以前我们都是在X或y轴上分别进行,其最大的点也不过是线,如果两者结合起来,其变成一个平面,把我们的重用从点提高到面。如下图所示: 面。如下图所示, Y重用 现在的软件开发不再仅仅是编写代码,重用等,而是需求调研、架构设计、数据库、编码开发、测试部署等过程的有机组合,组合的好与坏,其结果相差万里,这就是著名的米格-25效应。 在开发过程怎么去把这些最大效应化呢?回想一下我们的开发流程: 需求开发,形成文档 采用powerDesigner等进行实体及实体关系的设计 通过Pdm创建数据库 在开发工具中创建搭建项目 通过相关的工具(hibernate tools,myeclipse)生成实体 设计及编写Dao 设计及编写Service 设计及编写Action及相关页面 这样的线性流程有着极大的问题,首先架构师或数据库专家不是圣人,设计数据库,Dao,Service接口之后,就不需要修改,在编码过程中,会进行大量的修改,特别是那种那只懂数据库的专家在设计之后,开发人员怨声载道。另外设计的dao,service接口及实现很多都用不着,用得着的根本就没有设计。因为需要的dao,service很多都是由页面根据取数操作的不同而进行不同的编写。 开发过程的修改,就会带来原前置流程步骤的修改,所以软件开发完成之后,不会有很多公司其PDM与数据库、实体是一一对应的。而有一些是必须要修改,如在实体中修改属性,一定要到数据库中修改,到dao,service,action,page一一进行修改,如果修改的是外键属性,修改的代码更为复杂。开发人员最痛苦的事情就无穷无尽的修改,领导简单的一句话:不就修改一个属性吗?你可能就要改一个下午。 能不能有这样的方法呢?修改一处其它处跟着改,这时就需要把原来的线性流程乾变换,改成为无前置的试,即卫星城的方式,中心城就是模型,可以称为Domain、域、实体,在实体的基础是加上一些设计,如下图所示: 现在只要中间模型发生变化,其变化会通过其背后的关系推向卫星城,让其发生相对应的变化,就像蝴蝶效应一样。 此时,我们可以站在一个更高的层面去思考开发,开发不仅仅是代码,开发不仅仅是处理代码之间关系,还需要处理与数据存储的关系,与测试部署关系等。 这些关系我们需不需要去体现出来,肯定需要。我们可以把这些关系看作是软件中区别于业务逻辑属性的特殊属性,这种属性主要包括: 与数据存储之间的关系 代码结构组织的方面(如采用三层) 与设计及设计文档的关系 与开发模型(如瀑布)的关系 与需求及需求变更的关系 与测试部署之间的关系 除了这些特殊关系,代码中还有实体之间的关系,业务关系等。 我们可以发现软件不单纯是一个对象,而且是一组关系。它们相互关联,相互牵制。 续而推之,我们编写的类也是关系,是处理一类事物的抽象关系。泛型是处理类的抽象关系。所有东西都是关系体。 那么能不能在现有的面向对象的理论上推进一步呢?世界不是一个个单独的对象,而是不同的对象相互发生关系的有机结构体(可以称为关系体),只有这样,世界才多姿多彩。就算是一个个对象,它也不是静止的,它的内部也是由不同分子原子发生作用的结果,可以讲对象也是一个关系体。 软件是用来对世界进行描述的一种方式,最初我们采用过程的编程,后来与世界的描述不相符,所以就出现了面向对象,而现在面向对象并不能很好地解析如抽象类,Service类等。要解释这些东西,最好的方式是通过关系来达。也就是面向对象的编程方式可以更进一步地改进为面向关系编程方式。 面向关系编程需要首先需要找到软件模型与需求、架构,数据,测试,部署之间的变化关系。这些关系有业务层面的,也有开发层面的。这种关系可以抽离出来,形成模板。 接下来把业务模型+关系模板通过工具生产出来,就成为一个有血有肉的软件。Mgicode(码奇)生成器就从这里出发,帮我们抽象软件背后的关系,提高开发效率。 所以通过Mgicode生成器,你可以获得如下好处: 根据设计(pdm,数据库等)快速生成可运行的项目。 修改实体之后,会帮助你找到所有需要修改的东西,并且给出最佳的修改方案。 统一代码编程风格(如同一项目中选择几种不同日历控制) 把自己的项目模板化(关系化),方便之后使用 把模板化的项目放到Mgicode市场获得一些外快。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值