1 前言
JAD旨在为程序员提供一个高效的自动化开发平台,它涉及互联网JAVA后台技术基础架构的方方面面,比如持久化技术,缓存,分布式远程调用与微服务等等。同时,它内置了大部分信息化系统中所需要的会员管理、权限控制、流程管理、cms内容管理、oa办公自动化等业务模块供业务开发人员直接使用。
目前项目已经在开源中国码云平台上开源,
代码地址:https://git.oschina.net/457049726/jad
eclipse插件下载地址:http://pan.baidu.com/s/1c2nGXfq
官网网址:http://www.openjad.com
后台演示网址:http://demo.openjad.com/a
后台用户名/密码:admin/admin
后台dubbo服务治理用户名/密码:guest/guest
1.1 定义、术语及缩写
缩写 | 英文全称 | 中文全称 |
JAD | Java Auto Develop | java自动化开发平台 |
|
|
|
1.2 文件修订记录
文件修订记录
版本修改记录 (A --- 增加 M --- 修改 D --- 删除)
当前版本 | 日期 | 修改位置 (图、表、章节) | A/M/D | 简单描述 (原因和修改简介) | 修改人 | 评审人 |
1.0.1 | 2017-05-11 | ALL | A | 建立 | hechuan |
|
|
|
|
|
|
|
|
2 项目创建
请参见“JAD项目创建与部署测试.docx”文档。
3 业务开发
jad项目内置了权限管理、cms、oa等常用的业务模块,开发人员可以直接使用。
在jad内置的业务模块基础上进行其它的业务开发时,对于jad简单项目,需要在api模块中写service接,在core中写实体类、service实现类、dao接口和实现类。在web模块中写jsp文件(要了解项目结构,可参考“JAD项目创建与部署测试.docx”文档)。对于微服务架构项目,还需要在服提供者和消费者中进行配置。
一种推荐的做法就是通过JeeadWizard插件先创建一个jad实体,然后在这个基本上进行修改。
当然,为了提高开发效率,还有一种精简的业务开发方式,可以跟据需要省略一些service、dao、controller、jsp之类的代码文件,甚至精简到只有一个只包含属性和getter/setter方法的实体类,但这种方式还不太完善,不推荐。
在用JeeadWiard插件通过向导创建JAD项目时,需要指定“基础包”,比如“com.test”,这是整个项目所有java文件的包名前缀。在业务开发的过程中,所有业务模块相关的java类应该放在这个基础包下面的以业务模块名称为名的子包中,比如开发一个叫order的业务模块,则对像的模块包名为“com.test.order”。
3.1 实体创建
可通过JeeadWiard插件直接创建实体,在创建的过程中定义实体属性名称、类型等信息。也可以通过JeeadWiard插件从数据库表中创建实体。但作者推荐的方案是自己写一个只包含属性和getter/setter方法的简单类,然后击它选择“创建jad实体”。
通过JeeadWiard插件创建jad实体的过程中,会自动生成相应的controller、service、dao、jsp等代码文件。自动生成的代码文件可能还需要开发人员做一些简单的修改和完善,以下总结每个代码文件的开发规范和相关约定。
3.1.1 实体类开发规范
因为实体类的定义中包含了实体属性及后端数据库中表的列名,不能随意暴露出来,应放在核心业务层的core模块中的,并放在模块包名称的eo子包中,比如order这个模块对应的包名就是com.test.order.eo。
类名以"Eo"作为后缀,父类指定为BaseEo。类标签上以@Entity和@Table(name = "表名")标注为一个实体。
实体中所有属性尽量只使用String类型、Date及八种基本类型对应的包装类型,对于Date类型,请增加@Temporal(TemporalType.TIMESTAMP)注解。每一个属性请用@Column(name="列名")标注。属性名与列名尽量一一对应,但属性名称不用下划线用驼峰标识,而列名用下划线。如果遇到需要多表关联的地方,在多方的实体类中增加一个实体类型的自定义属性,用@ManyToOne标注的同时,再增加一个@RelateColumn(name="关联列",loadMethod=RelateLoadMethod.LEFT_JOIN)标注,以便让JAD 的dao框架能识别出这个关联。
通过以上规则写出来的实体类,是jad框架的标准实体类,可以被jad持久层自动识别,并且在不修改认何代码的情况下同时用于hibernate、mybatis、spring jpa的持久化技术中。
当然,如果开发人员常这种方式比较繁琐,也可以按照自己熟悉的规范去写,比如可以按mybatis的方式写实体类然后整一个对应xml文件来配置映射。或者你可按hibernate的风格去写实体类。
3.1.2 controller类开发规范
controller类写在controller模块中,需要继承BaseController类,并用controller注解标记。为了让项目具有自产api的能力,类签名上需要用@Api(description = "接口描述")标注,且类中需要成生api文档的方法需要用@ApiOperation(value = "方法作用",httpMethod = "GET")标注。除此外,其它的规则请按照传统的controller规范来写。
3.1.1 service类开发规范
service类包括接口和实现类,其中接口写在api模块中,接口类继承CurdService接口。实现类写在core模块中,并继承AbstractServiceImpl抽像类。
接口中的参数和返回值类型,如果是自定义类型,需要写成跟实体类对应的Vo或Qo。
3.1.2 VO/QO类开发规范
vo和qo类都写在api模块中,作为service接口方法的返回值或参数。vo类从BaseVo类继承,qo类从BaseQo类继承。而且它基本上与实体类对应,具有跟实体类中相同的属性,只不过vo的作用是用于各层之间的数据传递,而qo用作为查询条件对象。
在jad的持久化框架中,可以自动把qo类对象中的属性值转换为查询条件,并且自动拼接到sql语句的where条件中。而且qo中的属性可以与实体类的属性不一致,跟据“约定大于配置”的原则,在qo的属性定义过程中,可以跟据需求在原实体属名称的后面加一些比如“lt”之类的后缀作为qo类的属性,这样jad在自动转换成sql时,会跟据这些后缀自动指定为where条件中相应的操作符,比如在用户实体(UserEo)中有一个年龄属性(age),而对应的qo类(UserQo)也有一个跟年龄相应的属性(ageBegin)字段。则在跟据qo查询会员列表的过程中,如果ageBegin属性的值不为空,则生成的查询条件类似于"where age >=? "(因为ageBegin表示“年龄>=”的意思)。jad框架中,qo属性后比与对应的操作符声明见下表:
属性后缀 | 对应操作符 | 说明 |
Eq | = | 默的表达式,等同于 field=value |
BeginGt | > | 等同于 field>value |
Begin | >= | 等同于 field>=value |
EndLt | < | 等同于field<value表达式 |
End | <= | 等同于field<=value表达式 |
Like | like | 等同于field like '%value表达式%' |
LikeLeft | like | 等同于field like '%value表达式' |
LikeRight | like | 等同于field like 'value表达式%' |
notLike | not like | 等同于field not like '%value表达式%' |
NotLikeLeft | not like | 等同于field not like '%value表达式' |
NotLikeRight | not like | 等同于field not like 'value表达式%' |
IsNull | is null | 等同于field is null |
IsNotNull | is not null | 等同于field is not null |
In | in | 等同于field in (values) |
NotIn | not in | 等同于field not in (values) |
Between | between | 等同于field between (value1,value2) |
当然,在jad中qo不仅仅通过属性后缀来声明查询条件中的操作符,也可以在属性中用QueryProperty注解来指定。
更多更详细的用法请参见jad持久化技术相关文档。
3.1.1 dao类开发规范
dao类分接口和对像应的实现类,都写在core模块中。dao接口继承JadEntityDao接口,dao实现类继承AbstractJadEntityDao类。接口和实现类都用@JadDao标注,其中接口直接用@JadDao标注,不指定value,实现类用@JadDao标注时指定value属性为首字母小写的接口名称。
当然,以上约定只是为了使dao能被jad框架正常识别,并同时用于hibernate、mybatis、spring jpa中,而这样做的。开发人员完全可以不按照此规定,而按自己熟悉的规则写一些特定于hibernate或mybatis的代码。比如,在使用mybatis的情况下,可以只写dao接口,然后通对像的xml映射配置文件,在这些xml文件中写sql语句。
3.2 jsp开发规范
在通过JeeadWizard插件创建实体的过程中,会自动生成相应的jsp文件。然而当前项目的jsp界面是跟据旧版本的jeesite提供的ui来做。后续还需要改进。
3.3 rpc服务配置
JAD项目的微服务架构是基于是dubbo搭建起来的,服务配置遵循dubbo规范。
在JAD项目中,业务服务配置主要有两个,一个是服务提供者配置(在provider模块中),另一个是服务消费者配置(在web模块中),其中服务提供都配置文件以“provider-”开头,比如provider-cms.xml。服务消费者配置文件以“consumer-”开头,比如consumer-sys.xml。配置文件中具体内容和配置方式请参见dubbo相关规范。
想了解更多信息及时获得项目动态,请扫码关注作者公众号: