JAXB功能非常强大,主要是对java bean到xml之间的互转;JAXB的doc比较全面,网址:
http://jaxb.java.net/tutorial/
jdk5+已经自带了jaxb的包;应该是在rt.jar里;用法也比较简单,步骤如下:
1 加入 @XmlRootElement注解,标识xml根节点,默认名字是类名,可以加入name属性来改名;
简单转化就做完了,有几个地方:
1 生成xml比较简单,如果想把User里的userId和name变成xml根节点的一个属性可用(如果有get方法,需要加到get方法上)
2 如果想在节点外面包裹一层,可以用
A 通过@XmlSeeAlso,比如:
B 用SeeAlso注解的缺点是:每次加一个子类都需要修改注解代码重新编译,其实可以直接在JAXBContext.newInstance()中加入这些子类:比如
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修改节点名
public class User{
private String userId;
private String userName;
public String getUserId(){};
public String getUserName(){};
private String userId;
3 现在就可以生成xml了,代码如下:
private
String userName;
public String getUserName(){};
@XmlElement
public
String getUserId(){};public String getUserName(){};
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,比如:
@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());
}
}
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());
}
}
@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;
生成的xml类似:
String userId;
@XmlAttribute
String userName;
<
user
userId
="id1"
userName
="aaa"
>
<!-- 其他元素内容 -->
</ user >
<!-- 其他元素内容 -->
</ user >
2 如果想在节点外面包裹一层,可以用
@XmlElementWrapper(name
=
"
wapper
"
)
@XmlAttribute
private String userName;
生成的xml类似:
@XmlAttribute
private String userName;
<
user
>
< userId > id1 </ userId >
< wapper >
< userName > aaa </ userName >
</ wapper >
<!-- 其他元素内容 -->
</ user >
3 关于多态,JAXB也是支持的:有两种方式
< userId > id1 </ userId >
< wapper >
< userName > aaa </ userName >
</ wapper >
<!-- 其他元素内容 -->
</ user >
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{
}
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
代码: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