用友NCV6.1 NC数据库持久化学习
更新时间:2023-10-19 02:07:01 阅读量: 综合文库 文档下载
- 用友ncv6.5推荐度:
- 相关推荐
NC数据库持久化学习
1、案例的应用场景概述:
在NC的开发中可以直接通过JDBC编程来访问数据库。JDBC可以说是JAVA访问关系数据库的最原始、最直接的方法。这种方式的优点是运行效率高,缺点是在Java程序代码中嵌入大量SQL语句,冗余是不可避免的,开发人员常常发现自己在一次又一次地编写相同的普通代码,如获得连接、准备语句、循环结果集以及其他一些 JDBC 特定元素,使得项目难以维护。特别是当涉及到非常多的关系数据表、需要在多个不同类型的关系数据库系统中使用时,通过在程序中使用JDBC开发实施起来更加困难。
所以引入对象-关系映射是提高开发效率、提升软件产品的可维护、扩展性的现实需要。实践表明,在基于数据处理为主的企业级应程序开发中,通过引入对象-关系映射中间件,可以节省与对象持久化有关的编程工作量,同时提升软件产品可维护及易扩展性,提升软件产品质量。因此,在NC的业务开发中必要通过引入对象-关系映射系统中间件,实现数据库的快速开发。目前NC可以通过JDBC开发了单独的持久化层,把数据库访问操作封装起来,提供简洁的API,供业务层统一调用,实现了自己的ORM系统。
通过NC数据库访问框架可以把内存中的对象持久化到数据库、把数据库中的关系数据加载到内存中,同时保证了系统频繁地访问数据库的性能,降低访问数据库的频率。
2、具体解决方案(描述):
2.1通过JDBC FrameWork访问数据库
2.1.1 JdbcSession的创建
PersistenceManager sessionManager= PersistenceManager. getInstance (); try { JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话 相关业务操作 } catch (DbException e) { } finally { sessionManager. release ();//需要关闭会话 } 2.1.2结果集合的处理
对查询结果集合的处理,主要由ResultSetProcessor类来实现,这是一个接口 ResultSetProcessor包含有一个简单的方法,不同的ResultSetProcessor实现返回不同的结果对象。系统提供了一系列常用的默认实现。
ArrayListProcessorResultSetProcessorVectorProcessorMapProcessorArrayProcessorBeanProcessorColumnProcessorMapListProcessorBeanListProcessor
? ArrayProcessor 数组处理器,返回一个对象数组,结果集中只有一行数据,其中结果
集中每一列对应数组的一个元素。
? ArrayListProcessor 数组集合处理器,返回一个ArrayList集合,集合中的每一个元
素是一个数组,每个数组对应结果集中的一行数据,其中结果集中每一列对应数组的一个元素。
? MapProcessor HashMap处理器,返回一个HashMap, 结果集中只有一行数据,其中结果
集合中每一列的列名和列值对应HashMap的一个关键字和相应的值。
? MapListProcessor HashMap集合处理器,返回一个ArrayList集合,集合中的每一个
元素是一个HashMap,每个HashMap对应结果集中的一行数据, 其中结果集合中每一列的列名和列值对应HashMap的一个关键字和相应的值。
? BeanProcessor 值对象处理器,返回一个JavaBean,结果集中只有一行数据,该处理
器能自动把结果集中的值按列的名称映射到javaBean中,如结果集中有名称为”name”的字段,那么只要该java对象中有getName()方法就能把结果集合中”name”对应的值映射到对象中。
? BeanProcessor 值对象集合处理器,返回一个ArrayList集合,集合中的每一个元素是
一个javaBean,每个javaBean对应结果集合中一行数据,其中每个JavaBean中的数据映射关系和BeanProcess同理。
? ColumnProcessor 列值处理器,返回一个Java对象,结果集中只有一行数据,该对象
对应与结果集中某一列的值,该处理器通过结果集列的序号或名称来确定列。 ? BeanMappingListProcessor:值对象集合处理器,根据映射信息返回一个ArrayList
集合,集合中的每一个元素是一个javaBean,每个javaBean对应结果集合中一行数据,其中每个JavaBean中的数据映射关系和BeanMappingProcess同理
? BeanMappingProcessor:值对象处理器,根据映射信息返回一个JavaBean,结果集中
只有一行数据,该处理器能自动把结果集中的值按列的名称映射到javaBean中,如结果集中有名称为”name”的字段,那么只要该java对象中有getName()方法就能把结果集合中”name”对应的值映射到对象中
上述的默认实现并不能满足所有的业务需求,在开发过程中还需要实现自定义的结果集处理器。如:
public class CustomProcessor extends BaseProcessor { public Object processResultSet(ResultSet rs) throws SQLException { ? 自定义实现 ? } } 2.1.3更新的实现
I) 无参数更新数据
PersistenceManager sessionManager=null; try { sessionManager =PersistenceManager. getInstance (); JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话 String sql = \bd_invmandoc set pk_invmandoc ='0001AA10000000000DDD' where pk_invmandoc='0001AA10000000000DDD' \ session.executeUpdate(sql); } catch (DbException e) { } finally { if(sessionManager!=null) sessionManager. release ();//需要关闭会话 } II) 带参数更新数据
PersistenceManager sessionManager=null; try { sessionManager =PersistenceManager. getInstance (); JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话 String sql = \bd_invmandoc set pk_invmandoc ='0001AA10000000000DDD' where pk_invmandoc=?”; SQLParameter parameter = new SQLParameter(); 构造参数对象 parameter.addParam(\添加参数,JdbcSession会将参数对象中的每个对象放入到预处理对象的相应位置 session.executeUpdate(sql,parameter); } catch (DbException e) { } finally { if(sessionManager!=null) sessionManager. release ();//需要关闭会话 } III) 批量带参数更新数据
PersistenceManager sessionManager=null; try { sessionManager =PersistenceManager. getInstance (); JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话 String sql = \bd_invmandoc set pk_invmandoc ='0001AA10000000000DDD' where pk_invmandoc=? \ SQLParameter parameter = new SQLParameter(); parameter.addParam(\ session.addBatch(sql, parameter); int rows = session.executeBatch(); } catch (DbException e) { } finally { if(sessionManager!=null) sessionManager. release ();//需要关闭会话 } IV) 批量无参数更新
PersistenceManager sessionManager=null; try { sessionManager =PersistenceManager. getInstance (); JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话 String sql = \bd_invmandoc set pk_invmandoc ='0001AA10000000000DDD' where pk_invmandoc=’ '0001AA10000000000DDD'’ \ session.addBatch(sql); int rows = session.executeBatch(); } catch (DbException e) { } finally { if(sessionManager!=null)
int cc = rsmd.getColumnCount(); while (rs.next()) { Map
正在阅读:
用友NCV6.1 NC数据库持久化学习10-19
安全生产条件论证报告12-24
135MW锅炉规程04-17
五层框架结构教学楼 - 施工组织设计05-04
白瓷美肌必备八款美白面膜05-09
4S店事故车维修流程08-07
即时通讯工具软件规格需求分析07-28
鄂教版六年级下册期中测试卷06-07
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 用友
- 持久化
- 数据库
- 学习
- NCV
- 6.1