JDeveloper代码开发规范.docx

上传人:b****8 文档编号:30664524 上传时间:2023-08-19 格式:DOCX 页数:16 大小:49.51KB
下载 相关 举报
JDeveloper代码开发规范.docx_第1页
第1页 / 共16页
JDeveloper代码开发规范.docx_第2页
第2页 / 共16页
JDeveloper代码开发规范.docx_第3页
第3页 / 共16页
JDeveloper代码开发规范.docx_第4页
第4页 / 共16页
JDeveloper代码开发规范.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

JDeveloper代码开发规范.docx

《JDeveloper代码开发规范.docx》由会员分享,可在线阅读,更多相关《JDeveloper代码开发规范.docx(16页珍藏版)》请在冰豆网上搜索。

JDeveloper代码开发规范.docx

JDeveloper代码开发规范

程序代码开发规范

为了适应公司面向组件开发要求,为了更好的规范程序培养良好的代码书写习惯,增加代码的可读性便于后期的维护,把程序开发规范做调整。

1、程序调用关系

程序类及页面调用关系如下:

 

模块见调用关系图

在系统的需求及设计阶段就要考虑模块的划分,模块要求能够独立完成一个完整的业务尽量避免模块之间的调用(比如:

公文中的收发文管理就是独立的模块,不要把收发文管理中的发文单独做一个模块就会存在模块之间调用)。

公共模块为所有的模块提供服务单只允许业务模块调用公共模块。

模块间不能互调的内容包括:

前台显示页面、页面后台管理类、业务逻辑类。

2、命名规范

2.1目录命名

系统中java代码包目录结构:

com.xxxx.yyyy其中:

xxxx是业务系统编码、yyyy是业务模块编码;

com.xxxx.yyyy内部目录:

●view目录:

存放页面的后台管理

●model目录:

存放本模块的业务逻辑

●entity目录:

存放本模块的实体类

系统中jsp页面目录结构:

public_html\xxxx\yyyy\zzzz,其中xxxx为业务系统编码、yyyy为业务模块编码、zzzz为功能模块编码。

2.2文件命名

java文件命名:

●实体类通过工具进行生成,尽量不要手工去改里面的文件;

●业务逻辑类:

zzzzSession,zzzz为业务功能简称;

●后台管理类:

zzzzBean,zzzz为业务功能简称,后台管理类别名命名格式:

@BackBean(name="zzzzBean")其中zzzz为业务功能简介。

jsp文件命名:

●jsp文件:

xxxx_yyyy_zzzz_gggg.jsp,其中xxxx为业务系统编码、yyyy为业务模块编码、zzzz为功能模块编码、gggg页面类型:

main(入口主页面)、content(数据查询显示)、insert(插入页面)、update(更新页面)。

2.3类中方法命名

类中的方法尽量用代表操作含义的英文字母开头命名(如:

insertXxx()插入、updateXxxx()更新、deleteXxxx()删除等)。

所有的方面必须都要加注释。

3、代码注释

java类注释要求

●类功能简单说明

●开发员姓名必须为中文

●代码创建日期

类注释如下:

/**

*新框架代码测试后台管理类

*张三

*2012-2-28

*/

publicclassTest1ViewextendsBaseBean{

java类方法注释

●方法的功能说明

●方法参数说明

●方面返回值说明

例如:

/**

*插入多个实体对象

*@paramlistobj

*@returntrue成功;false失败

*@throwscom.itlamp.dbsql.DbException

*/

publicbooleanInsertArrayObj(Listlistobj)throwsDbException

4、SQL语句规范

1、尽量使用绑定变量。

这是在客户端程序中出现最多的问题。

不使用绑定变量,一方面将增加对每个语句的进行反复的PARSE,占用了大量的SGA空间和浪费了CPU的PARSE的时间,并导致SGA命中率不高;另一方面容易如果是接收的外界参数,外界可以进行SQL注入,造成信息泄露和数据的错误更新。

例:

Stringt_orderno=”--XXX”;

原语句:

Sql=“SELECT*FROMmtl_orderheadersWHEREorderno=’“+t_orderno+”’”;

改进后语句:

“SELECT*FROMmtl_orderheadersWHEREorderno=?

”;

在java语言中通过PreparedStatement的set方法进行参数传值。

2、尽量不要使用左值函数和左模糊查询。

左值函数和左模糊查询将SQL语句用不上索引,ORACLE将对引用的表采用ACCESSTABLEFULL,这对于大表来说,所花时间可能无法忍受。

例:

原语句:

SELECTUser_NoFROMv_user_perviewWHEREUser_No=?

ANDltrim(FUNCTION_NAME)='人员线体对应表'andLine_No=1;

改进后语句:

SELECTUser_NoFROMv_user_perviewWHEREUser_No=?

ANDFUNCTION_NAME='人员线体对应表'andLine_No=1;

3、少用空值作为查询条件。

因为空值将不能用上索引,尽量在缺省值,在插入数据时自动让ORACLE填上缺省值。

例:

原语句:

SELECT*FROMemployeeWHEREflagisnull;

改进后语句:

SELECT*FROMemployeeWHEREflag=0(让数据库自动缺省为0)

4、应尽量使用变量绑定实现SQL语句共享,避免使用硬编码。

例:

原语句:

SELECTemp_nameFROMempWHEREemp_no=123;

SELECTemp_nameFROMempWHEREemp_no=987;

改进后语句:

SELECTemp_nameFROMempWHEREemp_no=?

;//Bindvalue:

123

SELECTemp_nameFROMempWHEREemp_no=?

;//Bindvalue:

987

5、在含有子查询的SQL语句中,应减少对表的查询。

例:

原语句:

UPDATEemp

SETemp_cat=(SELECTMAX(category)

FROMemp_categories),sal_range=(SELECTMAX(sal_range)

FROMemp_categories)

WHEREemp_dept=0020;

改进后语句:

UPDATEemp

SET(emp_cat,sal_range)=(SELECTMAX(category),MAX(sal_range)

FROMemp_categories)

WHEREemp_dept=?

;

5、类代码要求

5.1业务逻辑类

业务逻辑类必须继承com.itlamp.dbsql.SessionSuper,基于SQL的查询、录入、修改、删除尽量用基于实体对象和参数sql进行操作。

业务逻辑类中的事务是通过异常进行处理,在逻辑类方法中的异常必须通过“throw“模式抛出,方法中代码不能超过200行。

业务逻辑类之间可以相互调用。

业务逻辑类推荐使用的方法:

/**

*对象方式插入

*@paramentobj实体对象

*@return成功true;失败false

*@throwsDbException

*/

publicbooleanInsertObj(Objectentobj)throwsDbException;

/**

*插入多个实体对象

*@paramlistobj多个数据库对象数组

*@return

*@throwsDbException

*/

publicbooleanInsertArrayObj(Listlistobj)throwsDbException;

/**

*把实体对象值更新数据库中

*@paramentobj实体对象

*@returntrue成功;false失败

*@throwsDbException

*/

publicbooleanUpdateObj(Objectentobj)throwsDbException;

/**

*更新多个实体对象值到数据库中

*@paramlistobj多个实体对象数组

*@returntrue成功;false失败

*@throwsDbException

*/

publicbooleanUpdateArrayObj(Listlistobj)throwsDbException;

/**

*删除实体对象

*@paramentobj要删除的实体

*@returntrue成功;false失败

*@throwsDbException

*/

publicbooleanDeleteObj(Objectentobj)throwsDbException;

/**

*删除多个实体对象

*@paramlistobj要删除实体对象数组

*@returntrue成功;false失败

*@throwscom.itlamp.dbsql.DbException

*/

publicbooleanDeleteArrayObj(Listlistobj)throwsDbException;

/**

*通过主键查找对象

*@paramcls实体对象类

*@paramkeyObj关键字对象

*@return查询到的实体对象

*/

publicObjectfindByKey(Classcls,ObjectkeyObj)throwsDbException;

/**

*通过带参数的sql语句把查询结果的第一条记录值赋给对象

*@parambasesql基本sql语句,如果要在sql语句中间增加where条件就需要增加#where#做为替换符号

*@paramwh参数值where条件辅助管理对象

*@paramtobj插入的对象

*@return赋值后的对象

*@throwsDbException

*/

publicObjectsqlSingleQuery(Stringbasesql,WhereHelperwh,Objecttobj)throwsDbException;

/**

*通过带参数sql语句获取查询结果

*@parambasesql基本sql语句,如果要在sql语句中间增加where条件就需要增加#where#做为替换符号

*@paramwhwh参数值where条件辅助管理对象

*@returnResult查到的结果集

*@throwsDbException

*/

publicResultsqlQuery(Stringbasesql,WhereHelperwh)throwsDbException;

/**

*通过sql获取List结果集,list中的元素为实体对象

*@parambasesql基本sql语句,如果需要把条件放到中间,要在语句中添加:

#where#

*@paramwhwhere条件辅助代理类

*@paramfclass实体对象类

*@returnList对象

*@throwsDbException

*/

publicListsqlQueryList(Stringbasesql,WhereHelperwh,Classfclass)throwsDbException;

/**

*通过sql获取List结果集,list中的元素为Map对象

*@parambasesql基本sql语句,如果要在sql语句中间增加where条件就需要增加#where#做为替换符号

*@paramwhwhere条件辅助代理类

*@returnList对象

*@throwsDbException

*/

publicListsqlQueryList(Stringbasesql,WhereHelperwh)throwsDbException;

/**

*通过sql语句,判断是否有记录

*@paramsql带参数的sql语句

*@paramparams参数的值

*@return记录数

*@throwsDbException

*/

publicbooleanhasRecord(Stringsql,Object[]params)throwsDbException;

/**

*通过参数更新数据库的值

*@paramsql带参数的更新语句

*@paramparams参数值数组

*@returnsql语句操作的记录数

*@throwsDbException

*/

publicintsqlUpdate(Stringsql,Object[]params)throwsDbException;

/**

*对Clob类型的字段进行操作,写Sql是注意用参数的方式:

如:

"updateOSIS_XXFB_B_FJsetCLOB_CONTENT=?

wherewdid='t_wdid'andSFZFJ='Y'"

*@paramsql带参数的sql语句

*@paramvalueClob字段的值

*@throwsException

*/

publicvoidsqlUpdateClob(Stringsql,char[]value)throwsDbException;

/**

*对Blob类型的字段进行操作,写Sql是注意用参数的方式,如:

"updateOSIS_XXFB_B_FJsetBLOB_CONTENT=?

wherewdid='t_wdid'andSFZFJ='Y'"

*@paramsql带参数的sql语句

*@paramvalue文件对象

*@throwscom.itlamp.dbsql.DbException

*/

publicvoidsqlUpdateBlob(Stringsql,Filevalue)throwsDbException;

业务逻辑尽量少用的方法:

/**

*通过带参数的sql语句把查询结果的第一条记录值赋给对象

*@paramsql参数的sql语句

*@paramparams参数值

*@paramtobj插入的对象

*@return赋值后的对象

*@throwsDbException

*/

publicObjectsqlSingleQuery(Stringsql,Object[]params,Objecttobj)throwsDbException;

/**

*通过带参数sql语句获取查询结果

*@paramsql带参数的sql语句

*@paramparamssql语句中参数值

*@returnResult查到的结果集

*@throwsDbException

*/

publicResultsqlQuery(Stringsql,Object[]params);

/**

*通过sql获取List结果集,list中的元素为实体对象

*@paramsql带参数sql语句

*@paramparamssql语句中参数值

*@paramfclass实体对象类

*@returnList数据对象

*@throwsDbException

*/

publicListsqlQueryList(Stringsql,Object[]params,Classfclass)throwsDbException;

/**

*通过sql获取List结果集,list中的元素为Map对象

*@paramsql带参数sql语句

*@paramparamssql语句中参数值

*@returnList对象

*@throwsDbException

*/

publicListsqlQueryList(Stringsql,Object[]params)throwsDbException;

/**

*通过sql语句,获取本sql记录数据

*@paramsql带参数的sql语句

*@paramparams参数的值

*@return记录数

*@throwsDbException

*/

publicintsqlRowCount(Stringsql,Object[]params)throwsDbException;

业务逻辑尽量避免使用方法,如果出现以下方法将会影响考核分

●publicObjectfind(Objectentobj)throwsDbException;

●publicObjectsqlSingleQuery(Stringsql,Objecttobj)throwsDbException;

●publicObjectsqlSingleQuery(Stringsql,Object[]params,Objecttobj)throwsDbException;

●publicResultsqlQuery(Stringsql,Stringupcase)throwsDbException;

●publicResultsqlQuery(Stringsql)throwsDbException;

●publicListsqlQueryList(Stringsql,Classfclass)throwsDbException;

●publicListsqlQueryList(Stringsql)throwsDbException;

●publicintsqlUpdate(Stringsql)throwsDbException;

●publicint[]sqlListUpdate(Listsqllist)throwsDbException;

●publicResultsqlQueryCache(Stringsql)throwsDbException;

●publicResultsqlQueryCache(Stringsql,inttimeout)throwsDbException;

代码具体说明:

publicclassTestSessionextendsSessionSuper{

//多次常用基本SQL语句变量,SQL变量名称须定义成static型,变量名称需大写增加”_SQL”

/*获取业务单元基本信息*/

staticStringYWDY_SQL="selectywmc,ywbm,xtbmfromSYS_B_YWDYwhere#where#orderbyywbm";

//end常用sql

//业务逻辑类的方法区域

/**

*添加实体对象方法

*@paramtobj要添加的实体对象

*@throwsDbException

*/

publicvoidInsert(SysBYwdytobj)throwsDbException{

try{

this.InsertObj(tobj);

}catch(SQLExceptione){

//e.pri

thrownewDbException(“操作出差:

”,e);//用来做事务控制

}

}

}

5.2后台管理类

后台管理类是前台页面与业务逻辑层进行交互的桥梁,在后台管理类中不允许有数据操作的sql语句,后台类通过实体对象、WhereHelper对象、SepArgs对象、List数组、Map对象等进行值传递;后台类必须继承ment.BackBean,后台类中定义的属性,用工具生成get、set方法,在get方法中如果需要对属性进行初始化必须先进行判断是否为”null”;业务逻辑类对象通过SessionFactory.getSessionBean(业务逻辑类)。

后台类中不允调用循环调用业务逻辑层的数据操作方法,不允许一个方法中同时执行业务逻辑两个或两个以上数据库操作方法。

类的格式:

@BackBean(name="testBean")//后台类的别名为了统一尽量与类名称一直

publicclasstestBeanextendsBaseBean{/*必须继承BaseBean*/

privateTestSessiontmod;//业务逻辑对象

privateListdata;

publictestBean()throwsDbException{

//初始化业务逻辑对象,格式如下

tmod=SessionFactory.getSessionBean(TestSession.class);

}

publicvoidsetData(Listdata){

this.data=data;

}

publicListgetData()throwsDbException{

if(data==null){//get方法中必须进行空值判读

this.getSepArgs().setPageRows(10);

SepResultret=tmod.getResult(this.getSepArgs());

data=ret.getData();

this.getSepArgs().setAllRecord(ret.getAllrecord());

}

returndata;

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1