约定简捷开发框架教程.docx
- 文档编号:3997300
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:46
- 大小:64.60KB
约定简捷开发框架教程.docx
《约定简捷开发框架教程.docx》由会员分享,可在线阅读,更多相关《约定简捷开发框架教程.docx(46页珍藏版)》请在冰豆网上搜索。
约定简捷开发框架教程
约定简捷开发框架教程
版本
1.1
作者
李安国
时间
2011-01-06
目录
第一部分前言部分4
一、背景4
二、设计目的4
三、框架命名4
四、启动时间5
五、应用的项目5
1.已结束的项目或系统5
2.将要开发的系统5
第二部分简单的Demo5
一、目的5
二、步骤5
三、代码的优点6
第三部分Web应用7
一、Web应用框架介绍7
二、准备工作8
三、VO类8
四、DAO类10
五、Business类11
六、Action类13
七、Table类16
八、定义struts-config.xml配置文件17
九、JSP文件18
第四部分打包解包应用23
一、准备工作23
二、协议类和协议配置文件23
三、通讯类24
1.端口通讯25
2.Socket通讯25
四、业务处理类26
五、启动类26
第五部分配置文件和常用类说明28
一、system-config.xml28
二、database.xml29
三、packet.xml30
1.protocol节点:
30
2.message-head节点30
3.message-body节点31
4.message节点31
5.field节点31
四、报文解析类33
1.AbtractProtocolParse类33
2.Iso8583ProtocolParse类33
3.LengthProtocolParse类34
五、文件导入支持类34
1.InputTxt类34
2.InputExcel类34
3.InputZip类34
六、报表下载支持类35
1.ExcelReport(Excel报表)35
2.PdfReprt(Pdf报表)36
3.TxtReport(TXT报表)36
4.ZipReport(Zip报表)36
七、其它工具类37
1.StrUtil类37
2.Arith类38
3.DB类39
4.MD64类41
5.ImgCheck类41
第六部分JSP标签41
一、条件标签42
1.CondItem类42
二、数据标签42
三、分页标签42
四、消息标签43
五、EL_VO标签43
六、Ajax标签43
七、Select标签45
第一部分前言部分
一、背景
使用Java编程语言可以开发各种各样的程序,完成各种各样的功能。
例如,可以使用Java开发GUI程序、前置交易系统等J2SE方面的程序和系统,也可以使用Java开发B/S方面的管理系统,亦可以使用Java开发嵌入式的手机程序之类。
我们公司主要使用Java开发B/S方面的后台管理系统,而后台管理系统的本质都很简单——使用Java对数据库进行增删改查,然后将结果返回到页面上。
为了提高开发人员对系统开发的效率,故编写本框架以达到这一目的。
二、设计目的
为B/S结构的后台管理系统和(桌面)小程序的开发提供一个便捷、快速的开发框架。
以达到在最短的时间内完成工作任务的目的。
三、框架命名
【约定简捷开发框架】
约定:
本框架中,许多的定义是预先约定好的常量和规则。
只要遵循所约定的规则,开发的效率才会提高上去。
简捷:
所谓的简捷,正如其所实现的功能。
只需要按照约定定义好数据库字段和命好类名,写少量的Java代码(甚至于不写Java代码),即可实现系统的功能。
四、启动时间
2009年10月
五、应用的项目
1.已结束的项目或系统
(1)转账通
(2)电子交易柜台
(3)三合一前置交易后台管理系统
(4)黑名单管理系统
(5)清算系统
(6)客户端后台管理系统
2.将要开发的系统
(7)客服投诉系统
(8)新版汇卡网
第二部分简单的Demo
六、目的
实现从文本文件中读取大量数据,并将读取的数据写入到数据库中。
七、步骤
1、在Eclipse中新建一工程,导入yzyue.v.1.0.0.0.jar架包,因需要采用数据源连接MySQL数据库,故另外导入了如下三个包:
commons-dbcp-1.2.2.jar、commons-pool-1.3.jar和mysql-connector-java-5.0.8-bin.jar
2、将system-config.xml和database.xml两个配置文件拷贝到src目录下,并配好数据源。
3、将要导入的文本文件放到工程目录下。
4、编写测试代码Demo.java,内容如下:
publicclassDemo{
privatestaticfinalLoglog=newLogImpl();
publicstaticvoidmain(String[]args){
Listdata=null;
FileInputStreamfileInputStream=null;
String[]fieldDefine=newString[]{"bankid","bankname","clearbankid","areacode","nombankid"};
try{
longstartTime=System.currentTimeMillis();
fileInputStream=newFileInputStream("bank.txt");
InputTxtinputTxt=newInputTxt(fileInputStream);
inputTxt.setSplitStr("\\|");
data=inputTxt.getData();
longreadTime=System.currentTimeMillis();
log.info("数据读取完毕,读取到["+data.size()+"]条记录,用时["+(readTime-startTime)+"]毫秒");
YzyueDataSourceyzyueDataSource=newYzyueDataSource();
DataSourcedataSource=yzyueDataSource.getDataSource(0);
StringtableName="bank";
booleanflag=DB.batchAdd(dataSource,tableName,fieldDefine,data);
longendTime=System.currentTimeMillis();
log.info("数据添加成功["+flag+"],用时["+(endTime-readTime)+"]毫秒");
}catch(FileNotFoundExceptione){
log.error(e);
if(Config.isDevelop())e.printStackTrace();
}finally{
try{
data=null;
fieldDefine=null;
if(fileInputStream!
=null)fileInputStream.close();
}catch(IOExceptione){}
}
}
}
八、代码的优点
1、简化的数据读取的代码。
(四行代码)
2、简化了数据连接对象的创建过程。
(两行代码)
3、简化了数据批量导入过程。
(三行代码)
4、批量导入的效率比较高。
(8W条数据5.4M,只需要3s即可完成导入)
另外,该代码值得学习的地方还有:
5、异常处理。
6、日志记录。
7、数组和集合对象的释放。
第三部分Web应用
Web应用是本框架的主体部分,本框架设计的主要目的亦是为了Web的开发而设计的。
九、Web应用框架介绍
本框架实现了MVC的模式,将过程分成VO、DAO、Business、Action和JSP页面五层结构。
VO:
即是对数据库表中字段的定义。
DAO:
对数据库中的表进行增删改查等操作的持久层。
Business:
对业务逻辑进行处理的业务层。
Action:
对连接业务逻辑和页面显示的中间层。
JSP:
用于显示数据信息的页面展示层。
在此,为了统一公司的代码规范,故作了许多约定,详见使用步骤。
*Table是用于显示页面上的分页查询的结果,对以表格显示的结果的格式进行了定义。
一十、准备工作
1、使用MyEclipse新建一个web工程。
由于本框架的Web应用是基于struts1.x的基础之上的,故在建好工程之后,需要在本工程上加上struts1.x的支持。
步骤:
工程上点右键->MyEclipse->AddStrutsCabobilities…
2、导入本框架的支持包yzyue.v.1.0.0.0.jar,添加system-config.xml和database.xml两个配置文件到src目录下,复制本框架的标签文件yzyue-tag.tld到WEB-INF目录下。
至此,准备工作已经完毕。
我们开始对一个表实现增删改查的功能。
一十一、VO类
规则一:
包的命名统一使用.gainfo.工程名,其包下分别建有vo、dao、business、action、table、ic等包。
规则二:
所有的VO对象必须继承自本框架中的AbstractVO类,且类的命名最好和数据库表的命名一致。
例如,表名为bank,则建议VO类名为BankVO。
如果表名和类名不一致,则需要覆盖AbstractVO类中的getTableName()方法。
规则三:
所有的VO对象中的属性必须得添加注解,且每个VO对象中至少要有一个关键字段。
1、添加注解的目的:
(1)程序能够识别数据库中的关键字;
(2)页面搜索条件显示注解中的信息;
(3)方便程序员读懂字段含义。
package.gainfo.demo.vo;
importcn.yzyue.base.vo.FieldProperty;
importcn.yzyue.base.vo.impl.AbstractVO;
publicclassBankVOextendsAbstractVO{
@FieldProperty(type=FieldProperty.KEY_FIELD,description="开户行行号")
privateStringbankid;
@FieldProperty(description="开户行名称")
privateStringbankname;
@FieldProperty(description="清算行行号")
privateStringclearbankid;
@FieldProperty(description="地区代码")
privateStringareacode;
@FieldProperty(description="行别")
privateStringnombankid;
}
2、一个完整的VO类如下所示:
3、常用的方法
(1)publicStringget(StringfieldName)
该方法用于根据VO对象的属性名称获取属性的值。
(2)publicbooleanset(StringfieldName,Stringvalue)
该方法用于设置单个属性值。
设置成功,则返回true,否则返回false。
(3)publicbooleanset(String[]fieldName,String[]value)
该方法用于设置多个属性的值。
其中fieldName和value的长度必须要保证一致。
设置成功,则返回true,否则返回false。
(4)publicStringgetTableName()
该方法用于获取VO对象所对应的数据库的表名。
如果运行的环境是Linux系统的MySQL,则可能需要覆盖该方法。
(Linux系统的MySQL的表名是区分大小写的)
(5)publicString[]getKeyFields()
该方法用于获取VO对象中的关键字列表。
(6)publicString[]getNoKeyFields()
该方法用于获取VO对象中的非关键字列表。
(7)publicStringtoString()
该方法用于打印VO对象中所定义的所有的属性名称和属性值。
4、测试示例
importjava.util.Arrays;
publicclassBankVOTest{
publicstaticvoidmain(String[]args){
BankVOvo=newBankVO();
vo.set("bankid","111111111111");
vo.set("bankname","银行");
vo.set("clearbankid","222222222222");
vo.set("areacode","1234");
vo.set("nombankid","111");
System.out.println(vo);
vo.set(newString[]{"bankid","bankname","clearbankid","areacode","nombankid"},newString[]{"AAAAAAAAAAAA","BANK","BBBBBBBBBBBB","ABCD","AAA"});
System.out.println(vo);
System.out.println(Arrays.toString(vo.getKeyFields()));
System.out.println(Arrays.toString(vo.getNoKeyFields()));
System.out.println(vo.getTableName());
}
}
一十二、DAO类
规则五:
新建的DAO类必须要添加ClassProperty注解,并声明好所引用的VO类。
规则四:
所有的DAO对象必须继承自本框架中的AbstractDAO类,且类的命令和VO对象类的命名一致。
规则六:
新建的DAO类中不需要添加任何方法,除非是为了特定的需求而新增方法,或者为了满足更高级的需求而重写AbstractDAO类的方法。
1、一个完整的DAO类示例如下:
package.gainfo.demo.dao;
import.gainfo.demo.vo.BankVO;
importcn.yzyue.base.dao.AbstractDAO;
importcn.yzyue.base.tools.classes.ClassProperty;
@ClassProperty(vo=BankVO.class)
publicclassBankDAOextendsAbstractDAO{
}
2、常用方法
(1)publicbooleanadd(DataSourcedataSource,VOvo)
将VO对象添加到数据库中。
(2)publicbooleanmod(DataSourcedataSource,VOvo)
将VO对象修改到数据库中。
(3)publicList
分页查询VO对象信息。
(4)publicList
自定义SQL语句查询数据。
(5)publicVOfindByIds(DataSourcedataSource,VOvo,String[]ids)
根据VO对象的关键字从数据库中查询VO对象。
(6)publicbooleandel(DataSourcedataSource,VOvo,String[]ids)
根据VO对象的关键字从数据库中删除VO对象。
(7)publicbooleanbatchDel(DataSourcedataSource,VOvo,List
根据VO对象关键字的List集合从数据库中删除数据。
(8)publicbooleanexist(DataSourcedataSource,VOvo)
判断VO对象(关键字段必须被赋值)在数据库中是否存在。
一十三、Business类
规则八:
新建的Business类必须要添加ClassProperty注解,并声明好所引用的DAO类和VO类。
规则七:
所有的Business对象必须继承自本框架中的AbstractBusiness类,且类的命令和VO对象类的命名一致。
规则九:
新建的Business类中不需要添加任何方法,除非是为了特定的需求而新增方法,或者为了满足更高级的需求而重写AbstractBusiness类的方法。
1、一个完整的Business类示例如下:
package.gainfo.demo.business;
import.gainfo.demo.dao.BankDAO;
import.gainfo.demo.vo.BankVO;
importcn.yzyue.base.business.AbstractBusiness;
importcn.yzyue.base.tools.classes.ClassProperty;
@ClassProperty(dao=BankDAO.class,vo=BankVO.class)
publicclassBankBusinessextendsAbstractBusiness{
}
2、常用方法
(1)publicbooleanadd(VOvo)
将VO对象添加到数据库中。
(2)publicbooleanmod(VOvo)
将VO对象修改到数据库中。
(3)publicList
分页查询VO对象信息。
(4)publicList
自定义SQL语句查询数据。
(5)publicVOfindByIds(VOvo,String[]ids)
根据VO对象的关键字从数据库中查询VO对象。
(6)publicbooleandel(VOvo,String[]ids)
根据VO对象的关键字从数据库中删除VO对象。
(7)publicbooleanbatchDel(VOvo,List
根据VO对象关键字的List集合从数据库中删除数据。
(8)publicbooleanexist(VOvo)
判断VO对象(关键字段必须被赋值)在数据库中是否存在。
3、注意事项。
(1)由于在AbstractBusiness的构造方法当中已经定义好了DataSource对象为database.xml中所配置的第一个数据源,故所有的Business类的方法中均无DataSource参数。
如果需要改变数据源,则需要在Business的构造方法中重新定义DataSource对象—dao。
(2)对于搜索条件中的下拉条件查询,建议其数据定义在此Business层。
分别定义List和Hashtable类型的对象,便于显示页面查询条件和页面(报表)数据的显示。
在给List和Hashtable赋值的时候,常量必须定义在ic包下对应的IC接口中,以便于日后的维护工作。
(3)业务逻辑的代码尽量全部写在Business层。
DAO层只负责数据库层的操作,Action层只负责数据的显示和页面的跳转。
4、示例
@ClassProperty(dao=PayerDAO.class,vo=PayerVO.class)
publicclassPayerBusinessextendsAbstractBusiness{
publicstaticListchangeTypeL=newVector();
publicstaticHashtablechangeTypeH=newHashtable();
static{
changeTypeL.add(newString[]{PayerIC.VERSION_ADD,"新增"});
changeTypeL.add(newString[]{PayerIC.VERSION_UPDATE,"更改"});
changeTypeL.add(newString[]{PayerIC.VERSION_DEL,"撤销"});
changeTypeH.put(PayerIC.VERSION_ADD,"新增");
changeTypeH.put(PayerIC.VERSION_UPDATE,"更改");
changeTypeH.put(PayerIC.VERSION_DEL,"撤销");
}
}
一十四、Action类
规则十一:
新建的Actions类必须要添加ClassProperty注解,并声明好所引用的Business类、DAO类和VO类。
规则十:
所有的Action对象必须继承自本框架中的AbstractAction类,且类的命令和VO对象类的命名一致。
规则十二:
新建的Action类中不需要添加任何方法,除非是为了特定的需求而新增方法,或者为了满足更高级的需求而重写AbstractAction类的方法。
1、一个完整的Action类示例如下:
package.gainfo.demo.action;
import.gainfo.demo.business.BankBusiness;
import.gainfo.demo.dao.BankDAO;
import.gainfo.demo.vo.BankVO;
importcn.yzyue.base.action.AbstractAction;
importcn.yzyue.base.tools.classes.ClassProperty;
@ClassProperty(business=BankBusiness.class,dao=BankDAO.clas
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 约定 简捷 开发 框架 教程