将XML结点转换成JAVABEAN并存入数据库
http://tech.ddvip.com 2007年07月03日 社区交流
内容摘要:动解析的过程中,我们仍然发现各个结点的解析和入库中有很多东西是共同的,或者有共同的规律,这些东西可以抽出来作为一个准框架,然后再将结点中不同的部分开放出来,允许具体的结点做具体的实现,并最终形成一个半自动的解析/入库框架。
而在XML中,JAVABEAN体系中,数据据表关系结构中,结点和结点之间的关系都是树形的关系。整体的解析和入库,就是在遍历树时执行转换动作。而我们知道,树的遍历是可以用递归算法实现的,而递归,就不用说了吧,它是实现程序“自动化”的主要途径之一。
以下是对各“树”的具体分析:
假设两个业务实体A和B之间存在聚合关系(父子关系)。那么具体可分三种情况:
a.B是一个原子字段(即不可再分),并且是A的一个属性。
XML中,B是A的XML ATTRIBUTE或者A的原子ELEMENT
BEAN中,B是A的成员变量,并且B是一个JAVA内置的数据类型
数据库中,B是A表的一个列
b.B是一个复合字段,并且是A的一个属性,而且和A是1:1关系
XML中,B是A的ELEMENT,并且B有自己的ELEMENT或者ATTRIBUTE
BEAN中,B是A的成员变量,并且程序中有个B类
数据库中,B表是A表的子表(即B外键参考了A表)
c.B是一个复合字段,并且是A的一个属性,而且和A是N:1关系
XML中,B是A的ELEMENT,并且B有自己的ELEMENT或者ATTRIBUTE
BEAN中,B组成一个类集(List,Set)共同作为A的成员变量,并且程序中有个B类
数据库中,B表是A表的子表(即B外键参考了A表)
了解了这三种情况,接下来就好办了。程序每抓到一个结点,都要递归地进行以下处理:先处理它的原子属性(情形a),接着处理它的单个子结点(情形b),最后处理它的类集子结点( 情形c)。
3.代码实现的重点
两个重点:
a.如何让业务实体在三棵树内一一对应好?
b.如何发现树形关系,比如A的属性有哪些,A的子结点有哪些?
问题a很简单,就是让三棵树里相同的业务实体取相同的名字。
责编:豆豆技术应用