JAB2完成Java bean到xml的相互转换

JAXB功能非常强大,主要是对java bean到xml之间的互转;JAXB的doc比较全面,网址:
http://jaxb.java.net/tutorial/
jdk5+已经自带了jaxb的包;应该是在rt.jar里;用法也比较简单,步骤如下:
1 加入 @XmlRootElement注解,标识xml根节点,默认名字是类名,可以加入name属性来改名;
@XmlRootElement
public   class  User{
    
private  String userId;
    
private  String userName;
    
public  String getUserId(){};
    
public  String getUserName(){};
2 加入@XmlElement注解,生成xml中的子节点,其实可以不加,不加默认就是生成,可以指定name修改节点名
    private String userId;
     private  String userName;
     @XmlElement
    public  String getUserId(){};
    
public  String getUserName(){};
3 现在就可以生成xml了,代码如下:
public   class  TestJAXB {
    @Test
    
public   void  bean2XML()  throws  Exception{
        User user 
=   new  User();
        user.setUserId(
" id1 " );
        user.setUserName(
" aaa " );
        JAXBContext context 
=  JAXBContext.newInstance(user.getClass());
        Marshaller m 
=  context.createMarshaller();
        StringWriter sw 
=   new  StringWriter();
        m.marshal(user,sw);
        System.out.println(sw.toString());
    }
}
4 生成了xml文件,可以转换成bean,比如:
public   class  TestJAXB {
    @Test
    
public   void xml2Bean()  throws  Exception{
        User user 
=   new  User();
        String xml 
=   " xml字符串 " ;
        JAXBContext context 
=  JAXBContext.newInstance(user.getClass());
        Unmarshaller um 
= context.createUnmarshaller();
        StringReader sr 
=   new  StringReader(xml);
        user 
=  (User)um.unmarshal(sr);
        
        System.out.println(user.getUserId());
    }
}

简单转化就做完了,有几个地方:
1 生成xml比较简单,如果想把User里的userId和name变成xml根节点的一个属性可用(如果有get方法,需要加到get方法上)
    @XmlAttribute
    
String userId;
    @XmlAttribute
    String userName;
生成的xml类似:
< user  userId ="id1"  userName ="aaa" >
    
<!-- 其他元素内容 -->
</ user >

2 如果想在节点外面包裹一层,可以用
    @XmlElementWrapper(name = " wapper "  )
    @XmlAttribute
    
private  String userName;
生成的xml类似:
< user >
    
< userId > id1 </ userId >
    
< wapper >
        
< userName > aaa </ userName >
    
</ wapper >
    
<!-- 其他元素内容 -->
</ user >
3 关于多态,JAXB也是支持的:有两种方式
    A 通过@XmlSeeAlso,比如:
@XmlRootElement
public   class  User{
    Person person;
}

@XmlSeeAlso({Man.
class , Girl. class })
public   class  Person{
}

public   class  Man  extends  Person{
}

public   class  Girl  extends  Person{
}

  B 用SeeAlso注解的缺点是:每次加一个子类都需要修改注解代码重新编译,其实可以直接在JAXBContext.newInstance()中加入这些子类:比如

JAXBContext context  =  JAXBContext.newInstance(user.getClass(), Man. class , Girl. class );
代码:http://www.zuidaima.com/share/2180116115393536.htm

hibernate的注释 @transient
@Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性.
如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic

jboss:http://blog.csdn.net/lyq123333321/article/details/44217409

springmvc:http://blog.csdn.net/lyq123333321/article/details/44217139
aop :http://blog.csdn.net/lyq123333321/article/details/44036821

http://blessht.iteye.com/blog/1105562/
http://blog.csdn.net/rickesy/article/details/47272797
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值