JDeveloper代码开发规范.docx
- 文档编号:30664524
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:16
- 大小:49.51KB
JDeveloper代码开发规范.docx
《JDeveloper代码开发规范.docx》由会员分享,可在线阅读,更多相关《JDeveloper代码开发规范.docx(16页珍藏版)》请在冰豆网上搜索。
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;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JDeveloper 代码 开发 规范