JDK自带的两种API是很难用的,想要提取想要的数据,需要写大量的代码。
1 什么是XML与Java类映射
XML很多元素,然后是值,而JavaBean也有很多属性。把这些属性对应起来,就叫做映射。
Hibernate就是一种Java 到数据库的映射框架。
2 JAXB的工作原理
与HIbernate映射类似,JAXB映射主要由4部分构成:
- schema
- JAXB
- XML文档
- Java对象
对比Hibernate映射来说:
- Schema 可以看做是数据库中的表结构。
- Document-XML文档是表中一条条记录
- JAXB 可以看做是Hibernate 提供Schema 到Java 对象的映射。
转换是双向的:
- marshal Java 对象转换XML 的过程。
- unmarshal XML转换 Java对象的过程
是不是有什么想法,传统的MVC 框架以XML配置看起来高大上,然后是各种配置眼花缭乱。
Springboot等微服务却把XML干掉了,却玩的很好 ,因为config不一定要用XML。
3 marshal :Java 对象转换成XML
目前映射除了编写映射文件,还可以使用注解(定好的接口,类加载的时候会优先扫描注解)
3.1 定义一个JavaBean
package com.wht.demo.xml;
import javax.xml.bind.annotation.XmlRootElement;
/**
* 简单的定义一个主机
* @author JDIT
*/
@XmlRootElement
public class NodeHost {
private String hostName;
private String ip;
public String getHostName() {
return hostName;
}
public void setHostName(String hostName) {
this.hostName = hostName;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
}
@XmlRootElement 这个注解很特殊,指定这个元素为根元素,一旦类标注了根元素,那么这个类的所有属性,默认映射为根元素的子元素。
3.2 测试类
package com.wht.demo.xml;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.File;
/**
* 测试类
* @author JDIT
*/
public class XMLTest {
public static void main(String[] args) {
File xmlFile = new File("D:\\test.xml");
JAXBContext context;
try {
context = JAXBContext.newInstance(NodeHost.