CDO cdo1= new CDO();
cdo1.setIntegerValue("classid", 1);
cdo1.setStringValue("classname", "一年级一班");
cdo1.setStringArrayValue("alias",new String[]{"尖子班级","优秀班级"} );
cdo1.setStringArrayValue("students", new String[]{"张三","李四"});
CDO scdo1= new CDO();
scdo1.setStringValue("username", "userone");
scdo1.setStringValue("password", ".......");
scdo1.setIntegerValue("age", 18);
cdo1.setCDOValue("scdo1", scdo1);
如果将它转化为XML表示如下:
<?xml version="1.0" encoding="UTF-8"?>
<CDO>
<NF N="classid" V="1"/>
<STRF N="classname" V="一年级一班"/>
<STRAF N="alias">
<STR>尖子班级</STR>
<STR>优秀班级</STR>
</STRAF>
<STRAF N="students">
<STR>张三</STR>
<STR>李四</STR>
</STRAF>
<CDOF N="scdo1">
<CDO>
<STRF N="username" V="userone"/>
<STRF N="password" V="..........."/>
<NF N="age" V="18"/>
</CDO>
</CDOF>
</CDO>
如果将这个对象转化为Json,将会有如下的表示:
{
"classid":1,
"classname":"一年级一班",
"alias":[
"尖子班级",
"优秀班级"
],
"students":[
"张三",
"李四"
],
"scdo1":{
"username":"userone",
"password":"...........",
"age":18
}
}
可以看出CDO这个数据结构还是设计的是非常优秀的。
在我们以往的开发中,如果大家稍加思索的话,大家都在写好多好多的bean,每个bean对应一个实体Entity,这样在开发大型的项目的过程中会感觉不合理,通过CDO这个结构,不需要针对每个entity都编写一个java bean类,假若我们有学生和班级两类实体,如果是按照以往的设计,可能会先设计出两个bean class:
package com.google.beans;
public class Student
{
private Integer id;
private String username;
private String address;
private boolean sex;
private double height;
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public String getAddress()
{
return address;
}
public void setAddress(String address)
{
this.address = address;
}
public boolean isSex()
{
return sex;
}
public void setSex(boolean sex)
{
this.sex = sex;
}
public double getHeight()
{
return height;
}
public void setHeight(double height)
{
this.height = height;
}
}
package com.google.beans;
public class Classes
{
private Integer classId;
private String className;
private Student[] students;
public Integer getClassId()
{
return classId;
}
public void setClassId(Integer classId)
{
this.classId = classId;
}
public String getClassName()
{
return className;
}
public void setClassName(String className)
{
this.className = className;
}
public Student[] getStudents()
{
return students;
}
public void setStudents(Student[] students)
{
this.students = students;
}
}
每个实体bean对应一个Class,如果实体多的话维护起来会很不方便,通过CDO,省去了这些代码:
CDO cdoStudent1 = new CDO();
cdoStudent1.setIntegerValue("id", 1);
cdoStudent1.setStringValue("username", "userone");
cdoStudent1.setStringValue("address", "上海市。。。。。。");
cdoStudent1.setBooleanValue("sex", true);
cdoStudent1.setDoubleValue("height", 1.74);
CDO cdoStudent2 = new CDO();
cdoStudent2.setIntegerValue("id", 2);
cdoStudent2.setStringValue("username", "usertwo");
cdoStudent2.setStringValue("address", "深圳市");
cdoStudent2.setBooleanValue("sex", false);
cdoStudent2.setDoubleValue("height", 1.67);
CDO cdoClasses = new CDO();
cdoClasses.setIntegerValue("classId", 1);
cdoClasses.setStringValue("className", "一年级一班");
cdoClasses.setCDOArrayValue("students", new CDO[]{cdoStudent1,cdoStudent2});
它们的XML表示分别为:
<?xml version="1.0" encoding="UTF-8"?>
<CDO>
<NF N="id" V="1"/>
<STRF N="username" V="userone"/>
<STRF N="address" V="上海市。。。。。。"/>
<BF N="sex" V="true"/>
<DBLF N="height" V="1.74"/>
</CDO>
<?xml version="1.0" encoding="UTF-8"?>
<CDO>
<NF N="id" V="2"/>
<STRF N="username" V="usertwo"/>
<STRF N="address" V="深圳市"/>
<BF N="sex" V="false"/>
<DBLF N="height" V="1.67"/>
</CDO>
<?xml version="1.0" encoding="UTF-8"?>
<CDO>
<NF N="classId" V="1"/>
<STRF N="className" V="一年级一班"/>
<CDOAF N="students">
<CDO>
<NF N="id" V="1"/>
<STRF N="username" V="userone"/>
<STRF N="address" V="上海市。。。。。。"/>
<BF N="sex" V="true"/>
<DBLF N="height" V="1.74"/>
</CDO>
<CDO>
<NF N="id" V="2"/>
<STRF N="username" V="usertwo"/>
<STRF N="address" V="深圳市"/>
<BF N="sex" V="false"/>
<DBLF N="height" V="1.67"/>
</CDO>
</CDOAF>
</CDO>
非常的清晰明了!
CDO不但能方便地转化为XML表示,而且能很方便的把XML文本串转化为CDO对象,假设有如下的XML文本串:
<?xml version="1.0" encoding="UTF-8"?>
<CDO>
<CDOF N="cdoReturn">
<CDO>
<NF N="nCode" V="0"/>
<STRF N="strText" V="OK"/>
<STRF N="strInfo" V="OK"/>
</CDO>
</CDOF>
<CDOF N="cdoResponse">
<CDO>
<CDOAF N="cdosMember">
<CDO>
<NF N="uid" V="5"/>
<STRF N="username" V="wanghui"/>
<STRF N="password" V="e4994c81a0c0db8e1ab137f9fdf7d5ae"/>
<STRF N="secques" V=""/>
</CDO>
<CDO>
<NF N="uid" V="353"/>
<STRF N="username" V="bainiuwang"/>
<STRF N="password" V="35b36dd98779303e3cdc84ff3951be9e"/>
<STRF N="secques" V=""/>
</CDO>
<CDO>
<NF N="uid" V="636"/>
<STRF N="username" V="wangli3849"/>
<STRF N="password" V="e3b2b5b80d57c3254c0ed1a83059d7ce"/>
<STRF N="secques" V=""/>
</CDO>
<CDO>
<NF N="uid" V="1006"/>
<STRF N="username" V="wangle520208"/>
<STRF N="password" V="059e5d9a6347d61859d7e2b740ef721b"/>
<STRF N="secques" V=""/>
</CDO>
<CDO>
<NF N="uid" V="1087"/>
<STRF N="username" V="wangyuepeng"/>
<STRF N="password" V="a5c74d745f45875d62fb418ed7e65ebb"/>
<STRF N="secques" V=""/>
</CDO>
</CDOAF>
<NF N="count" V="5"/>
</CDO>
</CDOF>
</CDO>
通过如下的代码便可转化为CDO对象:
StringBuilder builder = new StringBuilder();
builder.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
builder.append("<CDO>");
builder.append(" <CDOF N=\"cdoReturn\">");
builder.append(" <CDO>");
builder.append(" <NF N=\"nCode\" V=\"0\"/>");
builder.append(" <STRF N=\"strText\" V=\"OK\"/>");
builder.append(" <STRF N=\"strInfo\" V=\"OK\"/>");
builder.append(" </CDO>");
builder.append(" </CDOF>");
builder.append(" <CDOF N=\"cdoResponse\">");
builder.append(" <CDO>");
builder.append(" <CDOAF N=\"cdosMember\">");
builder.append(" <CDO>");
builder.append(" <NF N=\"uid\" V=\"5\"/>");
builder.append(" <STRF N=\"username\" V=\"wanghui\"/>");
builder.append(" <STRF N=\"password\" V=\"e4994c81a0c0db8e1ab137f9fdf7d5ae\"/>");
builder.append(" <STRF N=\"secques\" V=\"\"/>");
builder.append(" </CDO>");
builder.append(" <CDO>");
builder.append(" <NF N=\"uid\" V=\"353\"/>");
builder.append(" <STRF N=\"username\" V=\"bainiuwang\"/>");
builder.append(" <STRF N=\"password\" V=\"35b36dd98779303e3cdc84ff3951be9e\"/>");
builder.append(" <STRF N=\"secques\" V=\"\"/>");
builder.append(" </CDO>");
builder.append(" <CDO>");
builder.append(" <NF N=\"uid\" V=\"636\"/>");
builder.append(" <STRF N=\"username\" V=\"wangli3849\"/>");
builder.append(" <STRF N=\"password\" V=\"e3b2b5b80d57c3254c0ed1a83059d7ce\"/>");
builder.append(" <STRF N=\"secques\" V=\"\"/>");
builder.append(" </CDO>");
builder.append(" <CDO>");
builder.append(" <NF N=\"uid\" V=\"1006\"/>");
builder.append(" <STRF N=\"username\" V=\"wangle520208\"/>");
builder.append(" <STRF N=\"password\" V=\"059e5d9a6347d61859d7e2b740ef721b\"/>");
builder.append(" <STRF N=\"secques\" V=\"\"/>");
builder.append(" </CDO>");
builder.append(" <CDO>");
builder.append(" <NF N=\"uid\" V=\"1087\"/>");
builder.append(" <STRF N=\"username\" V=\"wangyuepeng\"/>");
builder.append(" <STRF N=\"password\" V=\"a5c74d745f45875d62fb418ed7e65ebb\"/>");
builder.append(" <STRF N=\"secques\" V=\"\"/>");
builder.append(" </CDO>");
builder.append(" </CDOAF>");
builder.append(" <NF N=\"count\" V=\"5\"/>");
builder.append(" </CDO>");
builder.append(" </CDOF>");
builder.append("</CDO>");
CDO cdoResponse = CDO.fromXML(builder.toString());
System.out.println(cdoResponse.toJSON());
这样便可打印出如下的Json字符串:
{
"cdoReturn":{
"nCode":0,
"strText":"OK",
"strInfo":"OK"
},
"cdoResponse":{
"cdosMember":[
{
"uid":5,
"username":"wanghui",
"password":"e4994c81a0c0db8e1ab137f9fdf7d5ae",
"secques":""
},
{
"uid":353,
"username":"bainiuwang",
"password":"35b36dd98779303e3cdc84ff3951be9e",
"secques":""
},
{
"uid":636,
"username":"wangli3849",
"password":"e3b2b5b80d57c3254c0ed1a83059d7ce",
"secques":""
},
{
"uid":1006,
"username":"wangle520208",
"password":"059e5d9a6347d61859d7e2b740ef721b",
"secques":""
},
{
"uid":1087,
"username":"wangyuepeng",
"password":"a5c74d745f45875d62fb418ed7e65ebb",
"secques":""
}
],
"count":5
}
}
确实是非常的方便!
CDO数据结构是整个CDO框架的核心,理解并掌握了这个数据接口,可以说掌握了CDO框架的百分之六十!