-
Notifications
You must be signed in to change notification settings - Fork 242
DevSteps
此为旧版本文档,与新版框架不一致!会尽快更新最新版本说明文档
以下以一个Demo对象演示单表的CRUD开发过程,用于说明基本的开发过程。具体实现细节和复杂业务功能实现,可结合文档技术说明及已有基础功能、样例功能等参考进行设计实现。
提示说明: 由于框架扩展了PropertyPlaceholderConfigurer加载属性处理,除了从properties属性文件外还额外从数据库参数表加载属性参数覆盖处理, 因此在第一次运行Server时会出现SQL异常找不到数据表,但是不影响程序正常运行部署,在Hibernate hbm2ddl第一次初始完成后再次启动Server就不会出现此SQL异常了。
项目代码中,showcase为一个样例WebApp工程,主要提供框架功能特性的参考样例实现; prototype为一个原型WebApp工程,主要是提供一个相对干净的原型工程,用于作为业务工程的参考起点,你可以直接基于该工程或拷贝更名为自己项目名称作为新项目project。 开发过程可以同时把showcase和prototype部署到Server中运行,可以实时一边参考样例一边进行自己的业务功能开发。
prototype提供了一个基本的Dome的包和对象实现代码,用于以下开发步骤说明,你可以根据情况在实现自己业务代码后把此Demo相关代码自行删除清理。
提示说明:
- showcase样例工程的sys模块下面的“枚举/数据字典”,“行政区划”等对象定义,是参考某些行业领域遗留表结构特定的实现方式,之所以有这些代码主要是为了保持样例功能的完整性,其本身并不是框架所推荐的设计参考。 如“枚举”请参考框架的ReportTypeEnum的用法,数据字典请参考DataDict对象接口和用法。
- 开发框架在不断优化改进过程中,很可能会遗漏重构showcase相关biz业务模块下面的代码,showcase工程biz模块下面的主要做做业务设计UI效果展示。 因此在实际基于开发框架参考进行开发编码的时候,建议尽量参考prototype和common-service/META-INF/resource工程下面基础业务功能相关最新代码实现。
- Entity对象定义
基于数据设计模型或直接基于业务模型进行Hibernate Entity对象的定义,参考lab.s2jh.biz.demo.entity.Demo做了一个最简洁的实体定义,可在基础上结合JPA/Hibernate语法定义复杂属性。
- 基于Entity对象调用代码工具生成CRUD框架代码
在工程对应的generator\entity_list.properties中添加新增实体对象定义[lab.s2jh].biz.demo.entity.Demo; 之后如果熟悉Maven用法,直接在Eclipse或cmd命令行中运行工程的pom.xml的generator profile配置: mvn compile -Pgenerator 命令执行完成后刷新工程,工程对应的generator\codes各目录下应该就有最新的框架代码文件。 根据代码生成工具说明中介绍,根据需要拷贝相关代码到业务模块目录(如果初次模块定义没有相关package或目录,先自行创建即可)。 主要涉及业务代码目录,如prototype\src\main\java\lab\s2jh\biz\demo; 测试代码目录,如prototype\src\test\java\lab\s2jh\biz\demo\test\service; JSP页面代码目录,如prototype\src\main\webapp\pages\biz\demo
- 进行简单的单元测试验证
相关Entity、Dao、Service、Test等代码拷贝就位后,可以尝试做个基本的框架单元测试验证, 如DemoServiceTest已生成了一个基本的数据保存和查询测试方法,只需简单的以Junit方式运行此单元测试代码即可,不出意外是能够正常运行结束并在Console看到相关日志和SQL语句信息
- Web层Controller编码配置
由于框架引入了struts2-rest-plugin,
所以其Web层控制器后缀采用以Controller结尾,如DemoController,而不是常规的Action结尾。
按照struts2-convention-plugin规则,
可以在多个层面多种方式定义Controller的Namespace,框架采用了以一个模块一个声明的方式,具体就是在web.action包下面定义package-info.java文件,在其中声明Namespace,如:
@Namespace("/biz/demo")
@MetaData(title = "演示模块")
package lab.s2jh.biz.demo.web.action;
import lab.s2jh.core.annotation.MetaData;
import org.apache.struts2.convention.annotation.Namespace;
提示: 如果业务模块以单独的project方式定义,即maven新的依赖业务jar,则注意修改webapp工程资源目录的struts.xml中struts.convention.action.includeJars添加新的jar名称定义,如:
<constant name="struts.convention.action.includeJars" value=".*common-service.*,.*_wl_cls_gen.*" />
- 关于基础数据配置说明
提示说明:框架默认使用H2数据库配置,如果换成其他类型数据库,别忘了在工程的pom.xml中添加相应的JDBC Driver定义, 在s2jh-parent的pom.xml有Oracle和MySQL依赖可参考,MySQl之类在Maven资源库中直接可引用,不过Oracle,SQL Server等可能需要自行从官方网站下载安装到本地资源库。
为了简化初始化配置,prototype默认依然采用H2嵌入数据库方式, 可以自行根据项目需要修改prototype\src\main\resources\context\spring-profiles.xml使用其他数据库。 更换数据库注意把
<jdbc:script location="classpath*:sql/ddl/quartz/tables_h2.sql" encoding="UTF-8" />
的tables_h2.sql修改成对应其他数据库脚本, Quartz支持的数据库脚本清单在common-service\src\main\resources\sql\ddl\quartz目录下。 同时,Quartz提供一系列特定数据库的driver delegate,具体支持列表可打开quartz的jar文件的目录org.quartz.impl.jdbcjobstore或根据官方文档设定项目quartz-cluster.properties中org.quartz.jobStore.driverDelegateClass参数值。
prototype\src\main\resources\sql\data目录下提供了一些基础数据sql脚本,可满足prototype基本运行,可根据需要调整数据。
prototype\src\main\resources\application.properties中有个jdbc.initialize.database.enable参数控制是否对嵌入H2数据库初始化基础数据, 配置为true则会把sql\data下面的相关sql脚本(此套SQL脚本应该比较通用,不过目前只在H2运行测试,其他类型数据库运行出现问题请自行微调)初始化运行,由于配置采用File存储运行H2,所以初始化动作一般只需要一次即可。 因此如果第一次运行请修改设置为true,成功初始化数据后就可以改成false,避免每次启动运行server重复执行insert操作导致大量SQL异常。
如果初始化运行使用系统后出现数据操作失误想恢复初始化数据,只需根据spring-profiles.xml文件中定义的,${user.dir}是当前登录用户目录, 把${user.dir}/h2/prototype相关打头文件删除后再按照上述修改jdbc.initialize.database.enable参数重新运行server初始化数据即可。
- 部署运行进行基本的CRUD功能访问验证
相关Controller、JSP等文件和配置就位后,可以尝试直接以URL请求方式访问新功能,具体URL访问路径格式规则请仔细理解struts2-convention-plugin
将WebApp工程部署到Eclipse Server中,注意配置Server时要采用TC Server或Tomcat的7以上版本才能支持Servlet3规范,具体解释说明请参考技术特性中Embedded Resource章节。
启动Server成功运行后,打开浏览器建议FireFox,访问: http://localhost:8080/prototype/ ,访问相关菜单项进行基本的增删改查操作。
Tips:Web层开发过程如果遇到问题,可以尝试利用struts2-config-browser-plugin,
访问:http://localhost:8080/prototype/config-browser/index ,查看相关Web层配置是否符合预期从而查找分析问题
- 基本CRUD功能完成
至此,通过代码工具生成和开发框架基础实现,已经具备一个新功能的基础的CRUD操作支持,下一步可以通过开发框架的菜单管理功能把新功能添加到菜单列表中通过主界面菜单导航快速访问。 然后再参考样例功能和具体业务需求,不断添加完善新功能设计和实现。