cdoframework系列介绍1:CDO对象说明

来源:互联网 发布:传智播客java视频 编辑:程序博客网 时间:2024/06/05 00:15
 1 什么是CDO
  CDO的全称是Common Data Object,中文翻译为“通用数据对象”,CDO是CDO技术框架的核心概念,可以说,理解了CDO,就已经掌握了50%的CDO技术框架的内容。

  CDO可以理解成是一种万能的数据结构,可以用于存储各种类型的数据。同时,CDO又是一种XML化的数据结构,任何一个CDO对象都可以和特定格式的XML文本互相转换。

CDO采用可嵌套的Hash表存储数据,而内部每个存储的数据项的Key均为String类型,Value则既可以为bool,byte,short,integer,long,float,double,String,Date,Time,DateTime等基本类型,也可以为上述基本类型的数组bool[],byte[],short[],integer[],long[],float[],double[],String[],Date[],Time[],DateTime[],而且也可以为CDO或CDO[]。

1.1 CDO的XML格式
  比如,我们用一个CDO对象来存储某公司员工张三的相关信息,该CDO对象对应的XML文本如下:

<?xml version="1.0" encoding="UTF-8"?>
<CDO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation=" http://www.cdoframework.com/xsd/CDO.xsd">
<StringField Name="Id" Value="A001"/>
<StringField Name="Name" Value="张三"/>
<DateField Name="Birthday" Value="1980-01-01"/>
<StringField Name="DepartmentId" Value="D21"/>
<StringField Name="Title" Value="部门经理"/>

<IntegerArrayField Name="MonthSalarys">
<Integer>5000</Integer>
<Integer>5000</Integer>
<Integer>5000</Integer>
<Integer>5200</Integer>
<Integer>5200</Integer>
<Integer>5200</Integer>
<Integer>5500</Integer>
<Integer>5500</Integer>
<Integer>5500</Integer>
</IntegerArrayField>

<CDOArrayField Name="DepartmentMembers">
<CDO>
<StringField Name="Id" Value="A002"/>
<StringField Name="Name" Value="李四"/>
<DateField Name="Birthday" Value="1981-01-01"/>
<StringField Name="DepartmentId" Value="D21"/>
<StringField Name="Title" Value="工程师"/>

<IntegerArrayField Name="MonthSalarys">
<Integer>2000</Integer>
<Integer>2000</Integer>
<Integer>2000</Integer>
<Integer>2200</Integer>
<Integer>2200</Integer>
<Integer>2200</Integer>
<Integer>2500</Integer>
<Integer>2500</Integer>
<Integer>2500</Integer>
</IntegerArrayField>
</CDO>
<CDO>
<StringField Name="Id" Value="A003"/>
<StringField Name="Name" Value="王五"/>
<DateField Name="Birthday" Value="1982-01-01"/>
<StringField Name="DepartmentId" Value="D21"/>
<StringField Name="Title" Value="工程师"/>

<IntegerArrayField Name="MonthSalarys">
<Integer>1000</Integer>
<Integer>1000</Integer>
<Integer>1000</Integer>
<Integer>1200</Integer>
<Integer>1200</Integer>
<Integer>1200</Integer>
<Integer>1500</Integer>
<Integer>1500</Integer>
<Integer>1500</Integer>
</IntegerArrayField>
</CDO>
<CDO>
<StringField Name="Id" Value="A001"/>
<StringField Name="Name" Value="赵六"/>
<DateField Name="Birthday" Value="1983-01-01"/>
<StringField Name="DepartmentId" Value="D21"/>
<StringField Name="Title" Value="工程师"/>

<IntegerArrayField Name="MonthSalarys">
<Integer>1000</Integer>
<Integer>1000</Integer>
<Integer>1000</Integer>
<Integer>1200</Integer>
<Integer>1200</Integer>
<Integer>1200</Integer>
<Integer>1500</Integer>
<Integer>1500</Integer>
<Integer>1500</Integer>
</IntegerArrayField>
</CDO>
</CDOArrayField>
</CDO>



  在上面的代码中,我们可以:
  用Title当作Key获取张三的职位;
  用MonthSalarys[0]当作Key获取张三最近一个月的薪水数额;
  用DepartmentMembers[1]. MonthSalarys[0]当作Key获取张三的第二个下属员工的最近一个月的薪水数额。
  同样,我们也可以用相同的Key设置对应的数据值。

1.2 利用代码访问CDO对象
  下面,我们看看如果有必要的化,我们如何利用Java创建对应的CDO对象(实际开发当中,应用框架能基本避免大多数类似的代码):

CDO cdoEmployee=new CDO();
cdoEmployee.setStringValue("Id","A001");
cdoEmployee.setStringValue("Name","张三");
//…;

int[] nsMonthSalarys=new int[9];
nsMonthSalarys[0]=5000;
//…;
cdoEmployee.setIntegerArrayValue("MonthSalarys", nsMonthSalarys);

CDO[] cdosDepartmentMembers=new CDO[3];

cdosDepartmentMembers[0].setStringValue("Id","A002");
cdosDepartmentMembers[0].setStringValue("Name","李四");
//…;
nsMonthSalarys=new int[9];
nsMonthSalarys[0]=2000;
//…;
cdosDepartmentMembers[0].setIntegerArrayValue("MonthSalarys", nsMonthSalarys);
//…;

cdoEmployee.setCDOArrayValue("DepartmentMembers",cdosDepartmentMembers);


对象生成之后,可以利用下面的代码获取相关数据:

cdoEmployee.getStringValue("Name");//返回 张三
cdoEmployee.getInteger("MonthSalarys[0]");//返回 5000
cdoEmployee.getInteger("DepartmentMembers[0].Name");//返回 李四
cdoEmployee.getInteger("DepartmentMembers[0].MonthSalarys[0]");//返回 2000


对象生成之后,下面的代码输出上面的XML文本内容:

System.out.println(cdoEmployee.toXML());

其实,如果有了上面的XML文本内容,我们可以直接利用下面的代码生成Java对象:

CDO cdoEmployee=CDO.fromXML(strXML);


cdoframework的官方网站:http://www.cdoframework.com

原创粉丝点击