用友NCV6.1 NC数据库持久化学习

转载于:http://www.wendangku.net/doc/4da658764b73f242326c5f3c.html
仅用于学习。

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的创建
在这里插入图片描述
在这里插入图片描述
2.1.2结果集合的处理,即查询结果集合说明

对查询结果集合的处理,主要由ResultSetProcessor类来实现,这是一个接口ResultSetProcessor包含有一个简单的方法,不同的ResultSetProcessor实现返回不同的结果对象。系统提供了一系列常用的默认实现。

用友NCV6.1 NC数据库持久化学习
在这里插入图片描述
●ArrayProcessor 数组处理器,返回一个对象数组,结果集中只有一行数据,其中结果集中每一列对应数组的一个元素。

●ArrayListProcessor 数组集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个数组,每个数组对应结果集中的一行数据,其中结果集中每一列对应数组的一个元素。

●MapProcessor HashMap处理器,返回一个HashMap, 结果集中只有一行数据,其中结果集合中每一列的列名和列值对应HashMap的一个关键字和相应的值。

●MapListProcessor HashMap集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个HashMap,每个HashMap对应结果集中的一行数据, 其中结果集合中每一列的列名和列值对应HashMap的一个关键字和相应的值。

●BeanListProcessor 值对象集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个javaBean,每个javaBean对应结果集合中一行数据,其中每个JavaBean中的数据映射关系和BeanProcess同理。

● BeanProcessor 值对象处理器,返回一个JavaBean,结果集中只有一行数据,该处理器能自动把结果集中的值按列的名称映射到javaBean中,如结果集中有名称为”name”的字段,那么只要该java对象中有getName()方法就能把结果集合中”name”对应的值映射到对象中。

●ColumnProcessor 列值处理器,返回一个Java对象,结果集中只有一行数据,该对象对应与结果集中某一列的值,该处理器通过结果集列的序号或名称来确定列。

●ColumnListProcessor 列值处理器,返回一个阿ArrayList对象,结果集中有多行数据,该对象对应与结果集中某一列的值,该处理器通过结果集列的序号或名称来确定列

●BeanMappingProcessor:值对象处理器,根据映射信息返回一个JavaBean,结果集中只有一行数据,该处理器能自动把结果集中的值按列的名称映射到javaBean中,如结果集中有名称为”name”的字段,那么只要该java对象中有getName()方法就能把结果集合中”name”对应的值映射到对象中

●BeanMappingListProcessor:值对象集合处理器,根据映射信息返回一个ArrayList集合,集合中的每一个元素是一个javaBean,每个javaBean对应结果集合中一行数据,其中每个JavaBean中的数据映射关系和BeanMappingProcess同理

上述的默认实现并不能满足所有的业务需求,在开发过程中还需要实现自定义的结果集处理器。如:
在这里插入图片描述
2.1.3更新的实现

I)无参数更新数据
在这里插入图片描述
II)带参数更新数据
在这里插入图片描述
III)批量带参数更新数据
在这里插入图片描述
IV)批量无参数更新
在这里插入图片描述
在这里插入图片描述
2.2通过BaseDAO进行对象的持久化

2.2.1普通Java Bean的持久化

I)对象定义

Person.java
在这里插入图片描述
在定义了Person类以后,需要将Person类映射成数据表,需要注意的是目前的持久层对Java Bean和数据表之间的关系有一定限制,如一个Java Bean只能映射成一个数据表。下面这个例子,我们使用一个简单的表,将一个表映射成一个Java Bean,Java Bean 和表是一对一的关系。

Person.sql
在这里插入图片描述
在这里插入图片描述
II)构造数据映射对象

负责定义数据库与javaBean的映射信息的接口定义如下:
在这里插入图片描述
根据ImappingMeta接口的定义,可以知道任何实现了ImappingMeta接口的对象映射元数据类都必须提供Java bean对应的数据库表名称、主键名称、字段名称,以及和数据库字段一一对应的Java bean对象的属性名称。根据前面的例子我们可以定义Person.java的对象映射元数据类PersonVOMeta.java

注意对象映射元数据类命名规范为nc.vo.xxx.XXXVOMeta
在这里插入图片描述
在完成了对象映射元数据类后,就剩下的应用的编码工作了。为简化这个工作,在NC 系统中提供了nc.bs.dao.BaseDAO,该类是数据库访问帮助类封装了常用的持久层访问操作,提供了IUAPQueryBS和IVOPersistence以及superDMO中的所有方法。建议新的代码都使用BaseDAO。

BaseDAO dao=new BaseDAO()//使用默认的数据源

BaseDAO dao=new BaseDAO(dataSource)//使用指定的数据源

III)对象读取
BaseDAO对象已完成初始化,就可以方便地使用它了。首先,我们用它从数据库中读取一个Person对象。(在本例中,假设PERSON表中已存在10条记录,ID从1到10)。要从数据库中得到一个Person对象,只需要BaseDAO实例。让我们读入ID是5的Person对象。
在这里插入图片描述
IV)对象写入

现在创建一个Person对象,并将它写入数据库。
在这里插入图片描述
如果想要保留Person类中的主键并插入到数据表中应该使用

dao.insertObjectWithPK(person,meta);

V)对象更新

现在利用Person对象,更新数据库中的ID=4的对应数据
在这里插入图片描述
VI)对象删除

现在利用Person对象,删除数据库中的ID=4的对应数据
在这里插入图片描述
在这里插入图片描述
3、个人学习总结及使用经验:

在数据库开发时,JDBC FrameWork及BaseDAO两种方式都有各自的用途,下面说一下我对这两种方式的使用心得:

JDBC FrameWork的方式针对操作SQL比较灵活,且对结果集的不同类型处理方便了对结果集数据的使用,其实现模式针对接口编程也是被推崇的编程模式,值得开发人员学习。对于结果集的处理方式也与Apache的数据库操作组件Common Dbutils相似,对于数据表的读操作,Common Dbutils可以把结果转换成List,Array,Set等java 集合。

BaseDAO更体现ORM的思想,方便VO的映射,对数据模型的操控比较便捷。ORM思想早已深入每个开发人员的编程思想,有效的提高了数据库操作的高效性。在单据开发时,因为大多定义了元数据模型,应用BaseDAO可以很方便地进行单据的CURD操作。

另外,除上述的数据库操作方式外,我也会通过继承NC中的DataManageObject,获取数据库连接后,编写自己的JDBC操作,例如:
在这里插入图片描述
在这里插入图片描述
转载于:http://www.wendangku.net/doc/4da658764b73f242326c5f3c.html
仅用于学习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值