好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

用友NCV5-持久层技术红皮书.doc

23页
  • 卖家[上传人]:QQ15****706
  • 文档编号:98918044
  • 上传时间:2019-09-15
  • 文档格式:DOC
  • 文档大小:151.50KB
  • / 23 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 持久层技术红皮书NC-UAP 5.0用友NC-UAP2019-09-151第 页目 录第一章 前言 11. NC数据访问层特点 1第二章 JDBC FrameWork 31. JdbcSession的创建: 32. 数据访问异常的处理 43. 结果集合的处理 44. 更新的实现 64.1 无参数更新数据 64.2 带参数更新数据 74.3 批量带参数更新数据 84.4 批量无参数更新 85. JdbcSession中特殊参数类型 9第三章 对象的持久化 121. 普通Java Bean的持久化 121.1 对象定义 121.2 构造数据映射对象 131.3 对象读取 151.4 对象写入 151.5 对象更新 161.6 对象删除 162. SuperVO的持久化 16第四章 常用的API的使用 181. PersistenceManager 182. IVOPersistence持久化机制接口 193. IUAPQueryBS接口 194. 结果集的控制 20附录 211. 常见问题解析 21第 21 页第一章 前言在NC的开发中可以直接通过JDBC编程来访问数据库。

      JDBC可以说是JAVA访问关系数据库的最原始、最直接的方法这种方式的优点是运行效率高,缺点是在Java程序代码中嵌入大量SQL语句,冗余是不可避免的,开发人员常常发现自己在一次又一次地编写相同的普通代码,如获得连接、准备语句、循环结果集以及其他一些 JDBC 特定元素,使得项目难以维护特别是当涉及到非常多的关系数据表、需要在多个不同类型的关系数据库系统中使用时,通过在程序中使用JDBC开发实施起来更加困难  所以引入对象-关系映射是提高开发效率、提升软件产品的可维护、扩展性的现实需要实践表明,在基于数据处理为主的企业级应程序开发中,通过引入对象-关系映射中间件,可以节省与对象持久化有关的差不多40%的编程工作量,同时提升软件产品可维护及易扩展性,提升软件产品质量因此,在NC的业务开发中必要通过引入对象-关系映射系统中间件,实现数据库的快速开发目前NC可以通过JDBC开发了单独的持久化层,把数据库访问操作封装起来,提供简洁的API,供业务层统一调用,实现了自己的ORM系统   通过NC数据库访问框架可以把内存中的对象持久化到数据库、把数据库中的关系数据加载到内存中,同时保证了系统频繁地访问数据库的性能,降低访问数据库的频率。

      1. NC数据访问层特点具有透明性 业务对象在不知道数据访问实现的具体细节情况下,可以使用数据源由于实现细节隐藏在数据访问层的内部,所以访问是透明的 易于迁移 数据访问层使应用程序很容易迁移到其他数据库实现业务对象不了解底层的数据实现,所以迁移仅仅涉及到修改数据访问层减少业务对象中代码复杂性 因为数据访问层管理着所有的数据访问复杂性,所以它可以简化业务对象和使用数据访问层的其他数据客户端的代码数据访问层,含有许多与实现相关的代码(例如SQL语句)这样给开发人员带来了更高的效率、更好的可维护性、提高了代码的可读性等一系列好处 易于维护和管理把所有的数据访问集中在单独的层上,由于所有的数据访问操作现在都委托给数据访问层,集中化管理数据访问这种集中化可以使应用程序易于维护和管理 第二章 JDBC FrameWorkNC系统与数据库进行交互需要反复地调用SQL语句、连接管理、事务生命周期、结果处理和异常处理这些操作都是很常见的;不过这个重复的使用并不是必要的通过新数据访问框架可以解决与一个兼容JDBC的数据库的重复交互问题Jdbc Framework特点: 1. 灵活2. 简洁3. 高的容错性4. 异常的统一处理利用JdbcSession执行一个SQL,几乎不需要代码。

      你所需要的全部仅仅是一个数据源和一个JdbcSession 一旦你得到了它们,你将可以使用JdbcSession提供的大量方便的方法1. JdbcSession的创建:PersistenceManager sessionManager= PersistenceManager. getInstance ();try { JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话 相关业务操作} catch (DbException e) {}finally { sessionManager. release ();//需要关闭会话}2. 数据访问异常的处理DbException是一个抽象异常类, 它被用来处理SQLException和我们的数据访问异常之间的转换在数据访问框架中提供了不同数据库对不同DbException的实现并对每种数据库的SQLErrorCode进行了处理,统一转化成不同的方法,通过DbException能够精确的指定出数据访问过程中所出现的问题try { 数据访问过程} catch (DbException e) {//根据数据库的不同统一异常处理if(e.isBadSQLGrammar())//如果是语法错误 //to do 相关处理 if(e.isDataIntegrityViolation())//如果是数据一致性错误 //to do 相关处理}finally { //关闭会话}3. 结果集合的处理对查询结果集合的处理,主要由ResultProcessor类来实现,这是一个接口 ResultProcessor包含有一个简单的方法,不同的ResultProcessor实现返回不同的结果对象。

      系统提供了一系列常用的默认实现l ArrayProcessor 数组处理器,返回一个对象数组,结果集中只有一行数据,其中结果集中每一列对应数组的一个元素l ArrayListProcessor 数组集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个数组,每个数组对应结果集中的一行数据,其中结果集中每一列对应数组的一个元素l MapProcessor HashMap处理器,返回一个HashMap, 结果集中只有一行数据,其中结果集合中每一列的列名和列值对应HashMap的一个关键字和相应的值l MapListProcessor HashMap集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个HashMap,每个HashMap对应结果集中的一行数据, 其中结果集合中每一列的列名和列值对应HashMap的一个关键字和相应的值l BeanProcessor 值对象处理器,返回一个JavaBean,结果集中只有一行数据,该处理器能自动把结果集中的值按列的名称映射到javaBean中,如结果集中有名称为”name”的字段,那么只要该java对象中有getName()方法就能把结果集合中”name”对应的值映射到对象中。

      l BeanProcessor 值对象集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个javaBean,每个javaBean对应结果集合中一行数据,其中每个JavaBean中的数据映射关系和BeanProcess同理l ColumnProcessor 列值处理器,返回一个Java对象,结果集中只有一行数据,该对象对应与结果集中某一列的值,该处理器通过结果集列的序号或名称来确定列l BeanMappingListProcessor:值对象集合处理器,根据映射信息返回一个ArrayList集合,集合中的每一个元素是一个javaBean,每个javaBean对应结果集合中一行数据,其中每个JavaBean中的数据映射关系和BeanMappingProcess同理l BeanMappingProcessor:值对象处理器,根据映射信息返回一个JavaBean,结果集中只有一行数据,该处理器能自动把结果集中的值按列的名称映射到javaBean中,如结果集中有名称为”name”的字段,那么只要该java对象中有getName()方法就能把结果集合中”name”对应的值映射到对象中上述的默认实现并不能满足所有的业务需求,在开发过程中还需要实现自定义的结果集处理器。

      如:public class CustomProcessor extends BaseProcessor { public Object processResultSet(ResultSet rs) throws SQLException {… 自定义实现… }}4. 更新的实现4.1 无参数更新数据PersistenceManager sessionManager=null;try {sessionManager =PersistenceManager. getInstance (); JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话 String sql = "update bd_invmandoc set pk_invmandoc ='0001AA10000000000DDD' where pk_invmandoc='0001AA10000000000DDD' "; session.executeUpdate(sql);} catch (DbException e) {}finally { if(sessionManager!=null) sessionManager. release ();//需要关闭会话}4.2 带参数更新数据PersistenceManager sessionManager=null;try {sessionManager =PersistenceManager. getInstance (); JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话String sql = "update bd_invmandoc set pk_invmandoc ='0001AA10000000000DDD' where pk_invmandoc=?”; SQLParameter parameter = new SQLParameter(); 构造参数对象 parameter.addParam("0001AA10000000000DDD");添加参数,JdbcSession会将参数对象中的每个对象放入到预处理对象的相应位置 session.executeUpdate(sql,parameter);} catch (DbException e) {}finally { if(sessionManager!=null) sessionManager. release ();//需要关闭会话}4.3 批量带参数更新数据PersistenceManager sessionManager=null;try {。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.