Java与XML映射利器
熟悉Hibernate的朋友都知道,它可以把Java类和数据库表进行映射,通过操作Java对象的方式可以对表记录进行更新。这可以大大增加我们的开发效率,免去自己直接通过JDBC操作数据库表的繁琐过程。其实Mybatis也是类似的,只不过它是半自动的,需要自己写SQL。在利用Java开发基于XML的操作时你会不会也想要一款可以直接基于Java类建立对应的XML的映射关系,然后可以直接通过Java对象转换为对应的XML,或者可以直接通过XML转换为对应的Java对象的工具呢?如果你正在寻找这样一款工具,那么JAXB可以满足你的需求。JAXB是Java提供的一款Java和XML绑定(映射)的工具,建立起了对应的关系后,就可以直接通过一个简单的API就可以实现Java对象和XML之间的相互转换。
假设现在有一个User类,其结构如下,需要把它的对象转换为根节点为user的XML,其中User对象的每一个属性需要映射为XML的user节点下的一个字节点。那么我们只需要简单的在User类上标注@XmlRootElement即可,这表示类User需要映射为XML的一个根节点,对应的节点名称是user(这是JAXB的默认策略,默认取类名称的首字母小写形式作为根节点名称),如果不希望使用默认名称,也可以通过name属性指定自己想要的名称,就像下面示例中那样。就加一个注解就搞定了,是不是非常简单呢?
@XmlRootElement(name="user")
public class User {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
这时候我们使用下面的代码来进行测试,最核心的代码就是JAXB.marshal(user, System.out)
,它表示需要把user对象转换为对应的XML形式,并把它输出到控制台(System.out),其中的JAXB类是Java自带的一个JAXB工具类。
@Test
public void testXml() throws Exception {
//构造User对象
User user = new User();
user.setId(1);
user.setName("张三");
JAXB.marshal(user, System.out);
}
应用上面的测试代码会在控制台输出如下XML内容。是不是非常简单的就把Java对象转换为XML了。如果我们是基于DOM或者dom4j等编程,则我们需要一步步的调用很多的API,相比而言,这种基于注解进行映射的方式明显简单很多。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
<id>1</id>
<name>张三</name>
</user>
如果我们的根节点还是user,但是User类的id属性我们不想把它作为user节点下面的一个字节点,而是作为user节点的一个属性,这种也是很简单的,直接在getId()方法上加上@XmlAttribute注解即可。
@XmlRootElement(name="user")
public static class User {
private Integer id;
private String name;
@XmlAttribute
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
这个时候再运行上面的测试代码,生成的XML将是如下这样。
@XmlRootElement(name="user")
public static class User {
private Integer id;
private String name;
@XmlAttribute
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
如果User类的id属性希望作为user节点的一个属性,但是属性名称不希望使用默认的id,则可以通过@XmlAttribute的name属性指定一个我们想要的名称,比如下面指定的就是id1。
@XmlRootElement(name="user")
public static class User {
private Integer id;
private String name;
@XmlAttribute(name="id1")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
这时候生成的XML会是如下这样。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user id1="1">
<name>张三</name>
</user>
同样的,如果name属性映射的节点名称不希望是name,希望是name1,则我们可以通过@XmlElement(name="name1")来指定。
@XmlRootElement(name="user")
public static class User {
private Integer id;
private String name;
@XmlAttribute(name="id1")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@XmlElement(name="name1")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
这时候生成的XML会是如下这样。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user id1="1">
<name1>张三</name1>
</user>
上面介绍的都是定义了Java类与XML的映射关系后,把Java对象转换为XML的示例。接下来我们来看如下示例中把XML转换为Java对象。
@Test
public void testXml() throws Exception {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n" +
"<user id1=\"1\">\r\n" +
" <name1>张三</name1>\r\n" +
"</user>";
User user = JAXB.unmarshal(new StringReader(xml), User.class);
Assert.assertTrue(user.getId() == 1);
Assert.assertEquals("张三", user.getName());
}
是不是非常简单呢?以上只是介绍了JAXB的一些最基本的操作,想要了解更多内容可以参考笔者的JAXB开发详解,可以让你收获更多。
相关推荐
XML在Java应用程序里变得越来越重要, 广泛应用于数据存储和交换. 比如我们常见的配置文件,都是以XML方式存储的. XML还应用于Java Message Service和Web Services等技术作为数据交换. 因此,正确读写XML文档是XML...
JAVA与XML pdf 资料 JAVA与XML pdf 资料 JAVA与XML pdf 资料
java http 发送xml报文(java发送xml报文实例+参数)java http 发送xml报文java http 发送xml报文(java发送xml报文实例+参数)
java在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava...
英文版的JAVA XML编程手册,CHM文件。
NULL 博文链接:https://maimode.iteye.com/blog/1331972
《Java与XML》(第三版)向您展示如何穿透围绕着XML的宣传迷雾,让XML真正在您的工作中为您所用。它将教您如何使用XML的各种应用程序编程接口(API)、工具和技巧来构建实际的应用程序,为管理从配置文件到网络站点...
JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
Java Bean 与 XML 映射关系。如何只要关注业务实体,却不必关心XML的数据结构。相关的技术为J2EE JAXB。
JAVA与XML程序开发JAVA与XML程序开发
java与xml扫描版带书签 java与xml扫描版带书签 java与xml扫描版带书签
JAVA与XML.rar 《Java与XML》(第三版)向您展示如何穿透围绕着XML的宣传迷雾,让XML真正在您的工作中为您所用。它将教您如何使用XML的各种应用程序编程接口(API)、工具和技巧来构建实际的应用程序,为管理从配置...
这个程序集中的知识:通过解析配置文件获得与数据库的链接,同时解析xml映射数据库表,其中还运用到了反射机制,同时通过已经映射的数据库表来达到对数据库的各种操作。
JAVA与XML java
java http 发送xml报文java http 发送xml报文java http 发送xml报文java http 发送xml报文java http 发送xml报文java http 发送xml报文java http 发送xml报文java http 发送xml报文java http 发送xml报文java http ...
java解析xml字符串,添加属性,更新属性等
java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件
这是一个java对xml操作的两个类,xml文件的节点都是已知的,都需要提前指定.