EMP2.2Train基础平台开发培训 (以新网银内管开发为例) 一、平台概述 新网银内管涉及多个功能相对独立的子系统(如广告、网上商城、时间轴、传统网银内管等),为了提高系统性能避免单点故障,设计时考虑把每一个独立的子系统分开部署,通过整合的页面框架以及多应用的单点登录处理为用户提供统一的内管视图。 EMP2.2Train基础开发框架为各个应用子系统开发提供基础平台支撑,基础平台为应用提供了包括运行平台、展现框架以及统一的组织机构管理、资源权限管理、公共参数管理、授权管理在内的基础组件的支撑,应用系统开发时可以把更多的精力放在业务功能的实现而不用太多考虑技术方面的实现,所有新开发的子系统的内管应用都将基于EMP2.2Train基础开发框架进行开发。 内管基础框架基于EMP2.2开发,广告、商城、时间轴以及未来新开发的子系统也是基于EMP2.2开发,传统网银内管系统基于Liana3.5版本开发,也可以迁移至EMP2.2; 内管基础开发平台提供的是一个基线版的WEB工程(即EMP2.2Train),其他应用子系统基于内管的WEB工程基础上增量开发,内管基础WEB工程包含的内容如下: 基础技术组件 Emp.jar,LOAF,img,js,css,taglib(emp.tld) 基础支撑子模块 组织机构管理,资源菜单管理,权限控制,公共参数管理,授权管理,页面组件范例 开发环境 Eclipse3.5,IDE4EMP 二、搭建开发环境 1.Eclipse安装 Eclipse版本采用3.5 \\192.168.12.228\share\Java\Eclipse\eclipse-jee-galileo-win32.zip 2.IDE的安装 最新的EMP IDE版本,搭建开发环境时用 \\172.16.20.228\upload\EMP IDE.rar 3.基础开发平台导入 SVN资源地址: 目录:/dev_code/trunk/EMPTrain 4.数据库表建立 新建内管基础开发平台相关的库表,以及应用相关的业务表; 三、开发步骤 1、配置LOAFConfig.xml; 2、新建业务逻辑构件biz; 3、新建表现逻辑构件mvc; 4、新建jsp页面; 四、开发说明 1.LOAF组件 在Liana 3.5产品中,一个最为重要的组成部分就是LOAF组件,它是使用Liana 3.5产品进行开发所必须要掌握的部分。下面就LOAF组件做下完整的介绍。 •什么是LOAF ? LOAF(Liana Objectrelational mapping and AuthenticationFramework)全称为Liana对象关系映射和授权框架。对于一个Web应用系统来说,数据库访问是一个很重要的部分,而如何访问数据库又有多种方法:使用SQL直接访问数据库、使用存储过程访问数据库、使用EJB访问数据库、使用O/R Mapping框架(如Hibernate、iBatis)访问数据库……LOAF是我们自行开发的一套轻量级的数据库访问框架,它向开发者提供了在EMP基础框架下快速进行数据库开发的开发方法和一系列组件。通过使用LOAF框架,能屏蔽数据库差异,屏蔽安全漏洞(如SQL注入),规范并简化数据库开发过程,提高产品开发的效率。 •LOAF和其他数据库访问框架的区别是什么? LOAF基于EMP实现,和EMP是松散耦合的关系,使用EMP做开发时可以方便的使用LOAF,并且它可以和EMP其他数据库访问组件并存协同工作。 LOAF并没有提供所有的O/R Mapping功能,而是只提供最常用的一些功能(如查询和增删改)。使用LOAF可以解决网银应用中80%以上的数据库开发工作,但并不能解决所有的问题。一些复杂数据库操作与其使用LOAF,不如使用JDBC或存储过程来实现。 LOAF的大部分组件,完全不需要写任何Java和SQL代码即可完成数据库访问(此处为和Hibernate/iBatis的最大区别)。LOAF使用“声明+契约”的方式来生成SQL,使开发人员只需关注于数据即可完成开发。 LOAF提供了一套的授权框架,可以快速的开发需要多人授权的数据管理类交易。 •LOAF支持几种数据库? 当前支持的数据库有Oracle ,DB2,Sybase 。LOAF可迅速扩展以支持不同数据库。 •LOAF的配置文件有几个,都是做什么用的? LOAF只有一个全局的配置文件LOAFConfig.xml,一般放在项目的WEB‐INF目录下。此文件为一个标准XML文件,其中定义了数据库表和EMP应用数据的关系。下图是配置文件的格式说明: 以下是一个典型的配置文件的示例: ?xml version=1.0 encoding=UTF‐8 ? config.xml xmlns:xsi=‐instance xsi:noNamespaceSchemaLocation=LOAFConfig.xsd configs !‐‐ 城市信息 ‐‐ config businessCode=PUB_CITYINFO tableName=PUB_CITYINFO configField dataField=cityCode tableField=CIT_CODE isPrimaryKey=true / configField dataField=cityName tableField=CIT_NAME / configField dataField=provinceCode tableField=CIT_PROVINCE / /config !‐‐ 批量转账批次信息 ‐‐ config businessCode=CB_BATCH_INF tableName=CB_BATCH_INF configField dataField=batchNo tableField=BFL_BATCHNO isPrimaryKey=true/ configField dataField=session_customerId tableField=BFL_CSTNO / configField dataField=userId tableField=BFL_OPRNO / configField dataField=userName tableField=BFL_OPRNAME / configField dataField=totalNumber tableField=BFL_COUNT dataType=INTEGER/ configField dataField=totalAmount tableField=BFL_SUM dataType=DECIMAL/ configField dataField=orderSubmitTime tableField=BFL_SUBMITTIME / /config /configs /config.xml LOAF配置文件详细说明 config: 此元素定义了一张业务表的结构 businessCode: 为config的必备属性,定义了操作此表的交易代码 tableName: 为config的必备属性,定义了业务表的名称 subBusinessCode: 为config的可选属性,定义了操作此表时关联的子表的交易代码。用于做主表中的一条数据,对应一个或多个子表中的一条数据时使用。例如修改账户信息时,要同时修改账户信息表和账户限额表,此处连个表就是一个主表对一个字表的关系。 showBusinessCode: 为config的可选属性,定义了操作此表时需要辅助显示的数据来源表的交易代码。例如修改客户账号时,需要显示客户名称,但客户名称在账号信息表中没有,此时则通过此属性找到客户信息表中的客户名称 configField: 为config的必备子元素,定义了一张表内需要操作的字段 dataField: 为configField的必备属性,定义了表字段对应的context中的数据的名称 dataType: 说明非字符型的数据,可选值为INTEGER / DECIMAL / CLOB tableField: 为configField的必备属性,定义了表字段的名称 isPrimaryKey: 为configField的可选属性,此字段是否为数据库中业务表的主键 isJoinedKey: 为configField的可选属性,此字段是否为几个字段连接后值对应数据库中一个字段。例如configField dataField=customerId||userId tableField=UAC_USERID isPrimaryKey=true isJoinedKey=true/表示使用customerId和userId两个字段连接后对应UAC_USERID,当customerId=0001和userId=0002时,UAC_USERID=00010002 2.业务逻辑构件biz 基于表操作的业务逻辑采用LOAF组件的Action处理数据库的增删改查。 2.1.新增add 2.2.删除del 2.3.详情detail 2.4.分页查询query 基本查询SQL语句如下: 2.5.修改update 3.表现逻辑构件mvc 3.1.新增add 3.2.删除del 3.3.打开修改页面getUpdatePage 3.4.打开查看页面getViewPage 3.5.查询query 3.6.分页查询queryPage 分页查询指列表页面上点击查询按钮,前端向后台发起条件异步查询,返回JSONView,由前端页面的js进行解析并刷新列表区域。 3.7.修改update 4.Jsp页面 Jsp页面的开发请参考范例,位于WEB‐INF\mvcs\EMPTrain\core\appext\目录下; 4.1.新增add 4.2.修改update 4.3.查看view 4.4.列表query Emp:table标签的pageMode属性表示该表格数据是否采用分页查询,pageType表示表格数据通过什么类型组件获取,只有当LOAF组件时需要设置; 用户点击emp:button标签生成的按钮时,会出发页面上的js函数,规则为do+emp:button标签的id,其中id的首字母自动匹配为大写,如emp:button id=add label=新 增/按钮点击时调用的方法为: functiondoAdd(){varurl='emp:urlaction=addAppExtConfig.do/';url=EMPTools.encodeURI(url);window.location=url;}; 其中提交(submit)、重置(reset)、返回(back)三种类型的按钮为系统内置的缺省按钮,不需要在前端页面编写js函数,其他的按钮都需要有相应的js函数。 5.Taglib标签 Ja