开发手册Word文件下载.docx
《开发手册Word文件下载.docx》由会员分享,可在线阅读,更多相关《开发手册Word文件下载.docx(47页珍藏版)》请在冰豆网上搜索。
![开发手册Word文件下载.docx](https://file1.bdocx.com/fileroot1/2023-1/31/617dbefe-e949-475b-8678-d5744164dbff/617dbefe-e949-475b-8678-d5744164dbff1.gif)
1.1.1.4关键词
中文
英文
列表控件
grid
树控件
tree
列表树控件
gridTree
1.2类
1.2.1数据操作(DAO)
1.2.1.1原则
1)编写有关直接面向数据库的代码,如直接jdbc相关代码。
2)所有DAO继承UIHibernateDao,泛型有两个,一个是操作的实体类型、一个是主键类型
1.2.1.2命名
1)操作实体名称+DAO
1.2.1.3命名语法约定
3)定语附属词应作为定语在其要描述的名词或动词前作为名词或动词的一部分,支持多级定语。
4)如过长可使用单词缩写。
5)关键字名称应以实体类中实体为准统一、完全书写。
1.2.2业务逻辑(Service)
1.2.2.1原则
1)编写业务相关代码,处理业务逻辑以及部分SQL相关代码。
2)所有主键为UUID2,Hibernate自动生成
3)UIHibernateDao包含了大量的数据操作方法,有一些需要些原生SQL的可以添加新方法
4)创建主对象简单的增删改查
5)创建主对象复杂查询
6)创建主对象树操作
7)根据业务工作创建
8)一次执行的业务应封装为一个业务逻辑方法。
如需要多个业务方法应新建一个方法调用这些相关方法,以保证事务处理。
1.2.2.2命名
1)操作实体名称+Service
2)操作实体名称+操作类型+Service,如:
UserService。
3)业务功能名称(英文单词或词组命名,每个单词间首字母大写)+Service
1.2.2.3命名语法约定
1.2.3控制(Controller)
1.2.3.1原则
1)编写有关数据获取、整理为实体相应数据、转化为页面相应数据的代码。
2)url地址:
”/”+模块名+”/”+类名(不要Controller)+”/”+方法名+“.do”
3)方法内写对请求的控制和跳转,不能掺杂着任何的业务逻辑
4)总体统一命名规则。
url、jsp、方法中统一、规范、一致命名。
5)参数处理应写在Controller中。
6)一次执行的业务应封装为一个业务逻辑方法。
1.2.3.2命名
1)业务功能名称+“Controller”
1.2.3.3命名语法约定
1.2.3.4关键词(待补充)
1.3方法
1.3.1原则
1)每个方法尽量不超过50行,如超过应分出子方法进行调用
2)每个方法只能处理一个业务逻辑
3)方法参数中不能有request对象
4)每个类中最多不能超过10个方法
5)方法排序,以增加、修改、删除、查询4大类顺序排列,再以方法名称的长短顺序排列
6)查询都以GET方法、QBC、QBE形式编写,如果不能满足要求再写出HQL,还不能满足要求再用原生SQL,写原生SQL用配置文件的形式,同时写好3种数据库的形式SQLServer、Oracle、Mysql,使用SqlBuilder类
7)应避免多次读取同一位置数据的操作。
如有多次使用的需求,应一次性将数据保存入集合类中,以方便多次使用。
1.3.2命名
1.3.2.1基本方法
1)查询语句:
单条件列表查询:
find+返回对象泛型实体名称(首字母大写,如为本类对应实体应省略)+By+条件
多条件列表查询:
find+返回对象泛型实体名称(首字母大写,如为本类对应实体应省略)+BySome
单条件分页查询:
find+返回对象泛型实体名称(首字母大写,如为本类对应实体应省略)+Page+By+条件
多条件分页查询:
find+返回对象泛型实体名称(首字母大写,如为本类对应实体应省略)+Page+BySome
单条件数据查询:
find+返回对象英文描述(首字母大写)+By+条件
find+返回对象英文描述(首字母大写)+BySome
无条件查询:
find+返回对象英文描述(首字母大写)+All
2)添加:
save主实体名称(实体类型实体名称)
3)批量添加:
save实体名称Batch(实体类型…实体名称)
4)修改:
merge实体名称(实体类型实体名称)
5)批量修改:
merge实体名称Batch(实体类型…实体名称)
6)删除:
remove实体名称(主键类型id)
7)批量删除:
remove实体名称Batch(主键类型…id)
1.3.2.2业务方法
1)树节点查询:
treeLoader
1.3.2.3命名语法约定
6)所有组成单词均直接连接不用连接符
7)应遵循驼峰命名法。
8)动名词结构,动词在前。
9)定语附属词应作为定语在其要描述的名词或动词前作为名词或动词的一部分,支持多级定语。
10)在专属包或专属类中,专属词应省略。
11)如过长可使用单词缩写。
1.3.2.4关键词
查询
list
分页查询
page
添加
save
删除
remove
1.4参数
1.4.1原则
1)参数名称长度不应超过15个字符,如过长应使用部分简写
2)参数命名应保证名称的唯一性与完全性。
3)遵循驼峰命名法。
1.4.2命名
1)应与主操作实体属性名称相同。
如多级属性应按驼峰命名法直接连在其后。
2)业务参数应使用英文描述,形容词应在单词前表述。
1.4.2.1命名语法约定
12)所有组成单词均直接连接不用连接符
13)应遵循驼峰命名法。
14)动名词结构,动词在前。
15)定语附属词应作为定语在其要描述的名词或动词前作为名词或动词的一部分,支持多级定语。
16)复数单词应按英语语法负数形式,负数词的负数应增加Plural。
如:
idsPlural
17)如一个对象许多个类型出现应在后方直接添加类型名称或名称缩写。
idsStr
18)临时对象应以Temp结尾。
如idsStrTemp
19)以“i,j,m,n”为专属无具体意义临时对象。
并按顺序以此使用。
for(inti=0;
i>
10;
)
20)如过长可使用单词缩写。
1.4.2.2关键词
临时
temp
空
empty
1.5注释
1)注释描述关键词及描述方式应以实体中注释为准。
2)注释应描述清晰,没有多意性。
3)有取值范围的地方应标注取值范围并用“()”标注以“,”隔开
4)中文用词应以实体中字段注释应为基准,其他位置注释应保证完全准确一致。
1.6SVN提交注释
1)注释应以“提交人”及“提交内容”组成,并以“:
”隔开。
2)提交内容应参照描述规则描述准确充分。
3)修改BUG应以“修改”字样与“研发管理平台”中的BUG“[编号]标题”为提交内容。
4)补充提交应以功能提交内容后加“补充”字样为提交内容。
5)修改功能应以“修改”字样加功能名称以及修改描述为提交内容。
2其他约定及要求
1)代码文件中应不存在警告信息,警告信息应去除如有特殊需求应在警告旁注释。
2)需求未明确代码应注释TODO并注明未明确信息。
当需求明确后应删除。
3)所有系统自动产生TODO标示应处理,如不作处理应删除。
4)不可提交带有mian方法system.out,out等测试用代码。
5)SVN提交时应先选择同步数据处理所有冲突后,测试功能再统一提交,不可直接提交,或部分提交。
如有无法处理冲突应询问相关人协商解决。
6)原则上不允许出现catch代码块。
如需要异常处理可在处理代码最后再使用throw方法将原异常抛出。
3编码规范及示例
3.1后台
3.1.1实体定义
3.1.1.1实体类声明
1)声明方式:
@Entity
@Table(name="
T_KPI_STRATEGY_MAP"
含审计信息实体类应继承AuditableEntity类
不含审计信息实体应继承IdEntity类
2)命名规则:
应以数据库表名称去掉类型前缀及模块前缀后的名称命名,使用骆驼式命名法命名。
T_KPI_STRATEGY_MAP对应实体名StrategyMap。
3)注释:
公用实体应写出中文名称。
非公用实体应注明使用方式以及适用范围。
3.1.1.2数据类型
1)基础数据类型
以包装类代替基本数据类型。
int应使用Integer代替。
2)其他数据类型:
数据库类型或描述
JAVA类型
日期型、时间型
java.util.Date
大字段
Java.lang.Byte[]
以0,1表示是否字段如isLeaf
java.util.Boolean
3.1.1.3字段定义
1)命名规则:
特殊字段命名:
数据库字段名称或描述
属性名称
表名_NAME
name
表名_CODE
code
ESTATUS
status
EDESC
desc
ESORT
sort
ELEVEL
level
父节点
parent
子节点
childrens
除以上特殊字段外均按照骆驼试命名规则命名,如:
IMPROVEMENT_ITEM_NAME实体字段名应为:
improvementItemName
2)注释:
应注明名称使用方法如有取值范围应注明
例:
/**
*状态:
整改状态标示:
(0:
新建,1:
整改中,2:
整改完成)
*/
@Column(name="
ESTATUS"
privateStringstatus;
3)外键定义:
除有特殊业务需求,外键定义均已该外键对应实体类型为类型,以简单英文以骆驼命名规则格式命名。
privateKpiStrategyMapparent;
4)多对一关联(一对一关联):
/**
*父节点
*/
@ManyToOne(fetch=FetchType.EAGER,cascade=CascadeType.PERSIST)
@JoinColumn(name="
PARENT_ID"
privateKpiStrategyMapparent;
5)一对多关联
*子节点
*/
@OrderBy("
sortdesc"
@OneToMany(fetch=FetchType.LAZY,mappedBy="
parent"
privateSet<
KpiStrategyMap>
childrens;
6)多对多关联
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name="
T_RM_RISK_MEASURE"
joinColumns={
RISK_ID"
nullable=false,updatable=false)},
inverseJoinColumns={
MEASURE_ID"
nullable=false,updatable=false)})
RmTreatmentMeasure>
treatmentMeasures=newHashSet<
(0);
3.1.1.4字段含义约定及取值范围
约定含义
字段名称
取值范围(值:
含义)
dealStatus
逻辑删除标示
true:
有效
false:
状态标示
s:
待提交
p:
已提交
d:
已处理
isLeaf
叶子节点标示
叶子节点
非叶子节点
isSystem
系统初始化数据标示
系统初始化数据
非系统初始化数据
3.1.2ajax调用
1)get方式直接调用url
2)post方式提交表单
3.1.3QBC查询
1)分页查询
统一使用findPage方法进行查询,方法会返回一个Page,page类中有所要查询结果集、总条数、当前页数等
Page类需要俩个参数pageNO(当前页数)、pageSize(每页显示多少条)
Page类必须在Controller层创建,并设置pageNO、pageSize
示例:
Controller:
Page<
SysEmployee>
page=newPage<
();
page.setPageNo((limit==0?
0:
start/limit)+1);
page.setPageSize(limit);
Service:
DetachedCriteriadc=DetachedCriteria.forClass(SysEmployee.class);
dc.createCriteria("
sysUser"
"
u"
);
u.sysRoles"
r"
dc.add(Restrictions.eq("
r.id"
roleid));
if(StringUtils.isNotBlank(emp.getEmpcode())){
dc.add(Restrictions.like("
empcode"
emp.getEmpcode()));
}
if(StringUtils.isNotBlank(emp.getEmpname())){
empname"
emp.getEmpname()));
o_sysEmployeeDAO.findPage(dc,page,false);
2)关联查询
分别有两种查询方式:
一种QBC方式:
使用面向对象的形式进行关联查询
Criteriacriteria=o_sysOrgDao.createCriteria();
//第一个参数所连接对象的属性名称,第二个参数是别名
criteria.createAlias("
parentOrg"
p"
//查询的时候就可以用别名.所连接对象的属性来调用
criteria.add(Restrictions.eq("
p.id"
id));
criteria.list();
另一种是HQL方式:
示例
Stringhql="
fromSysOrganizationojoino.parentOrgpwherep.id=:
id"
;
Queryquery=o_sysOrgDao.createQuery(hql);
query.setParameter("
id);
query.list();
3)子查询
//子查询
DetachedCriteriadc=DetachedCriteria.forClass(SysOrganization.class);
…
criteria.add(Subqueries.exists(dc));
parentOrg.id"
Fgff
Subqueries为QBC的子查询对象,提供很多方法如exists、notExists、in、notIn等…
另一种HQL方式
示例:
fromSysOrganizationowhere
exists(select1fromSysOrganizationowherep.id=:
id)"
HQL子查询的写法和SQL非常相似,只需要把表名翻译成实体名即可
4)分组查询
ProjectionListprojectionList=Projections.projectionList();
projectionList.add(Projections.groupProperty("
name"
));
criteria.setProjection(projectionList);
Projections为QBC的分组和函数使用对象,提供很多方法如min、max、groupProperty等…
另一种HQL方式
fromSysOrganizationogroupbyname"
HQL分组查询的写法和SQL非常相似,只需要把表名翻译成实体名即可
5)原生SQL
Hibernate对SQL语句也不是完全支持的比如union、一些具有数据库特性的函数,支持还不是非常好这里就要用到了原生SQL,平台中也对使用原生SQL做了规定和统一管理,如果要使用原生SQL就要写oracle、mysql、mssql三种,分别存放于oracle.xml、mysql.xml、mssql.xml中
Stringsql=SqlBuilder.getSql("
select_user"
newHashMap<
String,String>
());
SQLQuerysqlQuery=o_sysOrgDao.createSQLQuery(sql);
sqlQuery.list();
Oraclexml:
<
sqlid="
>
<
!
[CDATA[
select*formsys_userwhereusername=$name
]]>
/sql>
3.2前端
3.2.1ExtJS
1)普通列表
示例说明
实现方式
FHD.ux.GridPanel
参数
说明
renderTo
渲染到页面
renderTo:
'
demo'
url
调用后台url
url:
__ctxPath+'
/test/queryTestMvcList.do'
height
列表的高度
height:
FHD.getCenterPanelHeight()
cols
列表需要显示的列
详细代码见后面
tbarItems
菜单项
searchable
是否支持查询,默认为true
searchable:
false
cols的代码:
cols:
[{header:
FHD.locale.get('
fhd.pages.test.field.name'
),dataIndex:
name'
sortable:
true,width:
60,flex:
1},
{header:
fhd.pages.test.field.title'
title'
fhd.pages.test.field.myLocale'
myLocale'
60,renderer:
function(value){
varindex=fieldstore.find('
id'
value);
varrecord=fieldstore.getAt(index);
if(record