电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

产品方案--NC61应用技巧集1.pdfVIP免费

产品方案--NC61应用技巧集1.pdf_第1页
1/27
用友股份-LE服务支持部产品方案--《NC61应用技巧1》建立日期:2013-01-01修改日期:xxxx-xx-xx文档属性:客户文控编号:LE-DY-CP-2013-00082/27文档控制创建记录审阅人姓名所属部门职位审阅签字发布人姓名所属部门发布时间日期作者所属部门邮件地址版本2013-01-01V1.03/27目录iSM智能检索.......................................................................................................................5案例的应用场景概述:...............................................................................................5具体解决方案(描述):............................................................................................5NCV5X与NCV6X安装部署的区别.......................................................................................9NC数据库持久化学习.......................................................................................................121、案例的应用场景概述:........................................................................................122、具体解决方案(描述):....................................................................................132.1通过JDBCFrameWork访问数据库...............................................................132.2通过BaseDAO进行对象的持久化................................................................183、个人学习总结及使用经验:................................................................................244/275/27iSM智能检索案例的应用场景概述:今天,IT对于绝大多数企业来说已经无可取代。IT已经成为企业运营及决策支持的重要组成。尤其是企业管理软件,它已经随着企业工业化与信息化深度融合愈发紧密的联系到企业业务的方方面面。可以说,企业IT管理除了企业硬件网络及安全外,企业管理软件的应用服务管理已经成为核心内容之一。如何充分利用已有的IT资源并持续优化资源配置,如何实现IT和业务目标相统一、持续推动业务发展、创造商业价值、提升企业运营效率、降低系统维护成本,目前已经成为众多企业信息部门主管、CIO、甚至更高层管理人员的重要难题。管理软件系统是企业决策与运营的神经系统,它的持久稳定运行与维护保障显得尤为重要。但高端管理软件系统的应用服务管理矛盾却非常突出,面临重重挑战:在此大背景下,用友公司创新推出iSM(IntelligentServiceManager)智能服务管理器,帮助企业搭建私有的IT服务管理云平台,并全面融合基于SOA架构的UAP平台、先进的多层穿透性能监控、互联网的即时通讯技术及后端的云服务平台,实现企业的IT融合及集中穿透式管控。智能检索是ISM的一个核心功能,支持针对知识库管理中已经审批的知识记录,进行检索查询,同时提供客户知识库与用友后台同步功能,使检索的结果更准确,解决问题更迅速。具体解决方案(描述):ISM智能检索已在NC5.6平台上实现,而ISM今年的产品规划是整体迁移到NC60平台。在NC60平台开发智能检索方案如下:功能注册菜单注册分配权限代码开发6/27业务建模最终效果①点击“智能检索”,进入检索主页面7/27②在提示框中输入需要查找的问题关键字,点击“搜索”显示查询结果,右侧按日期+关键字搜索内容排列显示最近的5个常见问题。注:支持多关键字+空格检索,如:输入“凭证(空格)资产”,即搜索带“凭证”或“资产”字样的知识记录③点击查询结果显示详细记录,勾选“高级搜索”可以设置搜索条件“NC版本”、“NC模块”、“年度”。8/279/27NCV5X与NCV6X安装部署的区别技术服务部葛震华gezh@yonyou.com案例的应用场景概述:NCV5X与NCV6X安装部署的区别具体解决方案(描述):代码安装:NCV6X是UAP平台代码释放---功能代码释放NCV5X是UAP平台代码释放---各业务代码按照依赖关系释放。JDK版本:NCV6X是JDK1.6NCV5X是JDK1.5部署配置工具:NCV6X做成了集成统一10/27NCV5X是根据中间件类型选择配置工具数据源配置:11/27NCV6Xiufo数据源不需要单独指定,原“IUFO数据源”变为“BAP资源库”。NCV5Xiufo数据源要单独指定,并且数据源名称必须是IUFO。账套配置:NCV6X账套配置系统管理入口和业务系统登陆入口分离,便于安全管理NCV5X系统管理账套配置入口和业务系统登陆入口在一个地址中。数据库表空间:NCV5X有六个默认使用的表空间:NNC_DATA01、NNC_DATA02、NNC_DATA03、NNC_INDEX01、NNC_INDEX02、NNC_INDEX03NCV6X只需要默认使用两个表空间:NNC_DATA01、NNC_INDEX01。WebSphere版本:NCV5X最高使用was版本为61031NCV6X目前使用was版本为7001712/27NC数据库持久化学习大型客户支持服务业务部张阳zhangyangc@yonyou.com1、案例的应用场景概述:在NC的开发中可以直接通过JDBC编程来访问数据库。JDBC可以说是JAVA访问关系数据库的最原始、最直接的方法。这种方式的优点是运行效率高,缺点是在Java程序代码中嵌入大量SQL语句,冗余是不可避免的,开发人员常常发现自己在一次又一次地编写相同的普通代码,如获得连接、准备语句、循环结果集以及其他一些JDBC特定元素,使得项目难以维护。特别是当涉及到非常多的关系数据表、需要在多个不同类型的关系数据库系统中使用时,通过在程序中使用JDBC开发实施起来更加困难。所以引入对象-关系映射是提高开发效率、提升软件产品的可维护、扩展性的现实需要。实践表明,在基于数据处理为主的企业级应程序开发中,通过引入对象-关系映射中间件,可以节省与对象持久化有关的编程工作量,同时提升软件产品可维护及易扩展性,提升软件产品质量。因此,在NC的业务开发中必要通过引入对象-关系映射系统中间件,实现数据库的快速开发。目前NC可以通过JDBC开发了单独的持久化层,把数据库访问操作封装起来,提供简洁的API,供业务层统一调用,实现了自己的ORM系统。通过NC数据库访问框架可以把内存中的对象持久化到数据库、把数据库中的关系数据加载到内存中,同时保证了系统频繁地访问数据库的性能,降低访问数据库的频率。13/272、具体解决方案(描述):2.1通过JDBCFrameWork访问数据库2.1.1JdbcSession的创建PersistenceManagersessionManager=PersistenceManager.getInstance();try{JdbcSessionsession=sessionManager.getJdbcSession();//开始jdbc会话相关业务操作}catch(DbExceptione){}finally{sessionManager.release();//需要关闭会话}2.1.2结果集合的处理对查询结果集合的处理,主要由ResultSetProcessor类来实现,这是一个接口ResultSetProcessor包含有一个简单的方法,不同的ResultSetProcessor实现返回不同的结果对象。系统提供了一系列常用的默认实现。14/27ResultSetProcessorArrayListProcessorArrayProcessorMapProcessorVectorProcessorBeanProcessorColumnProcessorMapListProcessorBeanListProcessorArrayProcessor数组处理器,返回一个对象数组,结果集中只有一行数据,其中结果集中每一列对应数组的一个元素。ArrayListProcessor数组集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个数组,每个数组对应结果集中的一行数据,其中结果集中每一列对应数组的一个元素。MapProcessorHashMap处理器,返回一个HashMap,结果集中只有一行数据,其中结果集合中每一列的列名和列值对应HashMap的一个关键字和相应的值。MapListProcessorHashMap集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个HashMap,每个HashMap对应结果集中的一行数据,其中结果集合中每一列的列名和列值对应HashMap的一个关键字和相应的值。BeanProcessor值对象处理器,返回一个JavaBean,结果集中只有一行数据,该处理器能自动把结果集中的值按列的名称映射到javaBean中,如结果集中有名称为”name”的字段,那么只要该java对象中有getName()方法就能把结果集合中”name”对应的值映射到对象中。BeanProcessor值对象集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个javaBean,每个javaBean对应结果集合中一行数据,其中每个JavaBean15/27中的数据映射关系和BeanProcess同理。ColumnProcessor列值处理器,返回一个Java对象,结果集中只有一行数据,该对象对应与结果集中某一列的值,该处理器通过结果集列的序号或名称来确定列。BeanMappingListProcessor:值对象集合处理器,根据映射信息返回一个ArrayList集合,集合中的每一个元素是一个javaBean,每个javaBean对应结果集合中一行数据,其中每个JavaBean中的数据映射关系和BeanMappingProcess同理BeanMappingProcessor:值对象处理器,根据映射信息返回一个JavaBean,结果集中只有一行数据,该处理器能自动把结果集中的值按列的名称映射到javaBean中,如结果集中有名称为”name”的字段,那么只要该java对象中有getName()方法就能把结果集合中”name”对应的值映射到对象中上述的默认实现并不能满足所有的业务需求,在开发过程中还需要实现自定义的结果集处理器。如:publicclassCustomProcessorextendsBaseProcessor{publicObjectprocessResultSet(ResultSetrs)throwsSQLException{…自定义实现…}}2.1.3更新的实现I)无参数更新数据PersistenceManagersessionManager=null;try{sessionManager=PersistenceManager.getInstance();JdbcSessionsession=sessionManager.getJdbcSession();//开始jdbc会话16/27Stringsql="updatebd_invmandocsetpk_invmandoc='0001AA10000000000DDD'wherepk_invmandoc='0001AA10000000000DDD'";session.executeUpdate(sql);}catch(DbExceptione){}finally{if(sessionManager!=null)sessionManager.release();//需要关闭会话}II)带参数更新数据PersistenceManagersessionManager=null;try{sessionManager=PersistenceManager.getInstance();JdbcSessionsession=sessionManager.getJdbcSession();//开始jdbc会话Stringsql="updatebd_invmandocsetpk_invmandoc='0001AA10000000000DDD'wherepk_invmandoc=?”;SQLParameterparameter=newSQLParameter();构造参数对象parameter.addParam("0001AA10000000000DDD");添加参数,JdbcSession会将参数对象中的每个对象放入到预处理对象的相应位置session.executeUpdate(sql,parameter);}catch(DbExceptione){17/27}finally{if(sessionManager!=null)sessionManager.release();//需要关闭会话}III)批量带参数更新数据PersistenceManagersessionManager=null;try{sessionManager=PersistenceManager.getInstance();JdbcSessionsession=sessionManager.getJdbcSession();//开始jdbc会话Stringsql="updatebd_invmandocsetpk_invmandoc='0001AA10000000000DDD'wherepk_invmandoc=?";SQLParameterparameter=newSQLParameter();parameter.addParam("0001AA10000000000DDD");session.addBatch(sql,parameter);introws=session.executeBatch();}catch(DbExceptione){}finally{if(sessionManager!=null)18/27sessionManager.release();//需要关闭会话}IV)批量无参数更新PersistenceManagersessionManager=null;try{sessionManager=PersistenceManager.getInstance();JdbcSessionsession=sessionManager.getJdbcSession();//开始jdbc会话Stringsql="updatebd_invmandocsetpk_invmandoc='0001AA10000000000DDD'wherepk_invmandoc=’'0001AA10000000000DDD'’";session.addBatch(sql);introws=session.executeBatch();}catch(DbExceptione){}finally{if(sessionManager!=null)sessionManager.release();//需要关闭会话}2.2通过BaseDAO进行对象的持久化2.2.1普通JavaBean的持久化I)对象定义19/27Person.java//importsimplied….publicclassPerson{privateintid;privateStringname;intage;publicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}…}在定义了Person类以后,需要将Person类映射成数据表,需要注意的是目前的持久层对JavaBean和数据表之间的关系有一定限制,如一个JavaBean只能映射成一个数据表。下面这个例子,我们使用一个简单的表,将一个表映射成一个JavaBean,JavaBean和表是一对一的关系。Person.sqlCREATETABLEPERSON(20/27IDNUMBER(5,0)NOTNULL,NAMEVARCHAR(40)NOTNULL,AGENUMBER(3,0)NOTNULL,PRIMARYKEY(ID))II)构造数据映射对象负责定义数据库与javaBean的映射信息的接口定义如下:publicinterfaceIMappingMeta{/***得到该数据库表的主键名称*@return主键名称*/publicabstractStringgetPrimaryKey();/***得到值对象对应的表名*@return表名*/publicabstractStringgetTableName();/***得到值对象的属性数组21/27*@return*/publicabstractString[]getAttributes();/***得到值对象的属性数组一一对应的表的列名数组*@return*/publicabstractString[]getColumns();}根据ImappingMeta接口的定义,可以知道任何实现了ImappingMeta接口的对象映射元数据类都必须提供Javabean对应的数据库表名称、主键名称、字段名称,以及和数据库字段一一对应的Javabean对象的属性名称。根据前面的例子我们可以定义Person.java的对象映射元数据类PersonVOMeta.java注意对象映射元数据类命名规范为nc.vo.xxx.XXXVOMetaimportnc.jdbc.framework.mapping.IMappingMeta;publicclassPersonVOMetaimplementsIMappingMeta{privateString[]attributes=newString[]{"id","name","age"};privateString[]columns=newString[]{"ID","NAME","AGE"};publicStringgetPrimaryKey(){return"ID";22/27}publicStringgetTableName(){return"Person";}publicString[]getAttributes(){returnattributes;}publicString[]getColumns(){returncolumns;}}在完成了对象映射元数据类后,就剩下的应用的编码工作了。为简化这个工作,在NC系统中提供了nc.bs.dao.BaseDAO,该类是数据库访问帮助类封装了常用的持久层访问操作,提供了IUAPQueryBS和IVOPersistence以及superDMO中的所有方法。建议新的代码都使用BaseDAO。BaseDAOdao=newBaseDAO()//使用默认的数据源BaseDAOdao=newBaseDAO(dataSource)//使用指定的数据源III)对象读取BaseDAO对象已完成初始化,就可以方便地使用它了。首先,我们用它从数据库中读取一个Person对象。(在本例中,假设PERSON表中已存在10条记录,ID从1到10)。要从数据库中得到一个Person对象,只需要BaseDAO实例。让我们读入ID是5的Person对象。23/27BaseDAOdao=newBaseDAO();PersonVOMetameta=newPersonVOMeta();dao.retrieveByClause(Person.class,meta,"id=5");IV)对象写入现在创建一个Person对象,并将它写入数据库。BaseDAOdao=newBaseDAO();Personperson=newPerson();person.setName(“tom”);person.setAge(“20”);PersonVOMetameta=newPersonVOMeta();dao.insertObject(person,meta);//默认会自动为Person对象生成主键如果想要保留Person类中的主键并插入到数据表中应该使用dao.insertObjectWithPK(person,meta);V)对象更新现在利用Person对象,更新数据库中的ID=4的对应数据BaseDAOdao=newBaseDAO();Personperson=newPerson();Person.setId(4);person.setName(“tom”);person.setAge(“20”);PersonVOMetameta=newPersonVOMeta();24/27dao.updateObject(person,meta);VI)对象删除现在利用Person对象,删除数据库中的ID=4的对应数据BaseDAOdao=newBaseDAO();Personperson=newPerson();Person.setId(“4”);PersonVOMetameta=newPersonVOMeta();dao.deleteObject(person,meta);3、个人学习总结及使用经验:在数据库开发时,JDBCFrameWork及BaseDAO两种方式都有各自的用途,下面说一下我对这两种方式的使用心得:JDBCFrameWork的方式针对操作SQL比较灵活,且对结果集的不同类型处理方便了对结果集数据的使用,其实现模式针对接口编程也是被推崇的编程模式,值得开发人员学习。对于结果集的处理方式也与Apache的数据库操作组件CommonDbutils相似,对于数据表的读操作,CommonDbutils可以把结果转换成List,Array,Set等java集合。BaseDAO更体现ORM的思想,方便VO的映射,对数据模型的操控比较便捷。ORM思想早已深入每个开发人员的编程思想,有效的提高了数据库操作的高效性。在单据开发时,因为大多定义了元数据模型,应用BaseDAO可以很方便地进行单据的CURD操作。另外,除上述的数据库操作方式外,我也会通过继承NC中的DataManageObject,获取数据库连接后,编写自己的JDBC操作,例如:publicclassDBextendsDataManageObject{25/27publicListqueryColumn(Stringsql){Connectioncon=null;Statementstmt=null;ResultSetrs=null;try{con=getConnection();stmt=con.createStatement();rs=stmt.executeQuery(sql);List>list=newArrayList>();ResultSetMetaDatarsmd=rs.getMetaData();intcc=rsmd.getColumnCount();while(rs.next()){Mapmap=newHashMap();for(inti=1;i<=cc;i++){map.put(rsmd.getColumnName(i).toLowerCase(),rs.getObject(i));}list.add(map);}returnlist;26/27}catch(Exceptionex){ex.printStackTrace();returnnull;}finally{try{if(rs!=null){rs.close();}if(stmt!=null){stmt.close();}if(con!=null){con.close();con=null;}}catch(Exceptione){e.printStackTrace();}}}27/27

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

产品方案--NC61应用技巧集1.pdf

您可能关注的文档

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信