注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

FlyingWind

 
 
 

日志

 
 
 
 

DK6的新特性(二)使用JAXB2来实现对象与XML之间的映射  

2008-08-10 14:38:18|  分类: JAVA资料 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
/7_n=58 DK6的新特性之二:使用JAXB2来实现对象与XML之间的映射  
n_en<E}zs JAXB 是Java Architecture for XML Binding的缩写,可以将一个Java对象转变成为XML格式,反之亦然。我们把对象与关系数据库之间的映射称为ORM, 其实也可以把对象与XML之间的映射称为OXM(Object XML Mapping). 原来JAXB是Java EE的一部分,在JDK6中,SUN将其放到了Java SE中,这也是SUN的一贯做法。JDK6中自带的这个JAXB版本是2.0, 比起1.0(JSR 31)来,JAXB2(JSR 222)用JDK5的新特性Annotation来标识要作绑定的类和属性等,这就极大简化了开发的工作量。实际上,在Java EE 5.0中,EJB和Web Services也通过Annotation来简化开发工作。另外,JAXB2在底层是用StAX(JSR 173)来处理XML文档。 闲话不多说了,下面用代码演示在JDK6中如何来用JAXB2 
jYh<ePJ-  
QB ]kY8iG public class JAXB2Tester { 
2U azqYD   public static void main(String[] args) throws JAXBException,IOException { 
c,^W?w+%T     JAXBContext context = JAXBContext.newInstance(Person.class); 
E*Y3N#$ D     //下面代码演示将对象转变为xml 
: ZiVWht     Marshaller m = context.createMarshaller(); 
b%alEr     Address address = new Address("China","Beijing","Beijing","ShangDi West","100080"); 
[z^VYV$6     Person p = new Person(Calendar.getInstance(),"JAXB2",address,Gender.MALE,"SW"); 
E'nJJ e!c     FileWriter fw = new FileWriter("person.xml"); 
]XL[<]$G     m.marshal(p,fw); 
tIQBq 2  
y[i: -     //下面代码演示将上面生成的xml转换为对象 
,iet^Ya~     FileReader fr = new FileReader("person.xml"); 
j8g?{Ul     Unmarshaller um = context.createUnmarshaller(); 
;av1,_D     Person p2 = (Person)um.unmarshal(fr); 
UR\nb(Z     System.out.println("Country:"+p2.getAddress().getCountry()); 
O"<?XF   } 
[Tx:.d+P
W/`"GAd!  
El?Lq=6 @XmlRootElement//表示person是一个根元素 
<`szDj]Bo class Person {    
/3Fl9 (   @XmlElement 
^@~{ Q   Calendar birthDay; //birthday将作为person的子元素 
J{U^38Jk9  
fXm {ag90   @XmlAttribute 
K)Z/-g   String name; //name将作为person的的一个属性 
' DK &YP5A  
|3rgvdr=   public Address getAddress() { 
o2^9<*~|     return address; 
~d ^uJV1ku   } 
AAnxP-$1vu  
68lLP2$?;   @XmlElement 
;U{u<?   Address address; //address将作为person的子元素 
+I:<FPSEkd  
2pvmv}A    @XmlElement 
GXcj^@   Gender gender; //gender将作为person的子元素 
$6>bs Y  
qR~/\4'h   @XmlElement 
+yKnwjtj   String job; //job将作为person的子元素 
oT'}B\d  
s^0{)=}0   public Person(){ 
.3Bn]'zV   } 
e3o!SQ,OK    
sFpT';Fd   public Person(Calendar birthDay, String name, Address address, Gender gender, String job) { 
ESJWBs..^     this.birthDay = birthDay; 
}(Y>PP.U     this.name = name; 
5ewg     this.address = address; 
us7v>4c     this.gender = gender; 
ni CSjYo     this.job = job; 
M./@S#?3   } 
hEM%|RYJ
$@_pT| }  
Fj2f]LO enum Gender{ 
H&{6S6*   MALE(true), 
G7~VE<)   FEMALE (false); 
?a> ?&p   private boolean value; 
m?>5|)GO;@   Gender(boolean _value){ 
B bt0WY~{     value = _value; 
4c5?(N",{   } 
.1Amab
c-DG.UZK  
PG?K Q- class Address { 
yG*fN~I@>   @XmlAttribute 
$wz$fy.TsW   String country; 
;y1YMy?   @XmlElement 
<B]IY*x   String state; 
??'A!A   @XmlElement 
 ~}bM$?~e   String city; 
'HZ;wlmY@   @XmlElement 
8RgiNCB3   String street; 
-J*p wy?"s   String zipcode; //由于没有添加@XmlElement,所以该元素不会出现在输出的xml中 
>/086uya]  
p60cjy0)}d   public Address() { 
X t0/D   } 
,\'Q^@++M  
/w}C42%*   public Address(String country, String state, String city, String street, String zipcode) { 
;HxC#ta     this.country = country; 
O4ccq     this.state = state; 
?v2y.pr     this.city = city; 
L1I7xx     this.street = street; 
OzUS9KD?=M     this.zipcode = zipcode; 
L6gI, c(   } 
Nqg.BfN  
:^Gb2C:  
X}{KnE} o   public String getCountry() { 
OP[4!4X     return country; 
Rcu0|~3pu-   } 
^Sx+7mh6b>
pd7&?U  
zXjS 运行该程序,我们会得到一个person.xml的文件,如下: 
yU~qlmy.gk  
/Wv[_S <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>  
c(K7:47kN  
)a*'q@3Vv <person name="JAXB2"> 
B/c6BnRl     <birthDay>2006-12-28T08:49:27.203+00:00</birthDay>  
s8wyPg)     <address country="China"> 
[-Bb3H=1         <state>Beijing</state>  
z]'}/2xl"         <city>Beijing</city>  
<='! K         <street>ShangDi West</street>  
@kfbzQ!` s </address> 
%]gGB     <gender>MALE</gender>  
])0?R`#f     <job>SW</job>  
B`B/3gsIc_ </person> 
1q;v 6N6= 控制台会输出 
8?x<cwW>:g  
NWv *e7] Country:China 
)?r5 qZP  
最后,想说一点,除了JAXB之外,我们还可以通过XMLBeans和Castor等来实现同样的功能。
  评论这张
 
阅读(271)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017