JDK6.0的新特性之二:使用JAXB2來實現物件與XML之間的對映
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()來,JAXB2()用JDK5的新特性Annotation來標識要作繫結的類和屬性等,這就極大簡化了開發的工作量。實際上,在Java EE 5.0中,EJB和Web Services也透過Annotation來簡化開發工作。另外,JAXB2在底層是用StAX()來處理XML文件。 閒話不多說了,下面用程式碼演示在JDK6中如何來用JAXB2
public class JAXB2Tester {
public static void main(String[] args) throws JAXBException,IOException {
JAXBContext context = JAXBContext.newInstance(Person.class);
//下面程式碼演示將物件轉變為xml
Marshaller m = context.createMarshaller();
Address address = new Address("China","Beijing","Beijing","ShangDi West","100080");
Person p = new Person(Calendar.getInstance(),"JAXB2",address,Gender.MALE,"SW");
FileWriter fw = new FileWriter("person.xml");
m.marshal(p,fw);
//下面程式碼演示將上面生成的xml轉換為物件
FileReader fr = new FileReader("person.xml");
Unmarshaller um = context.createUnmarshaller();
Person p2 = (Person)um.unmarshal(fr);
System.out.println("Country:"+p2.getAddress().getCountry());
}
}
@XmlRootElement//表示person是一個根元素
class Person {
@XmlElement
Calendar birthDay; //birthday將作為person的子元素
@XmlAttribute
String name; //name將作為person的的一個屬性
public Address getAddress() {
return address;
}
@XmlElement
Address address; //address將作為person的子元素
@XmlElement
Gender gender; //gender將作為person的子元素
@XmlElement
String job; //job將作為person的子元素
public Person(){
}
public Person(Calendar birthDay, String name, Address address, Gender gender, String job) {
this.birthDay = birthDay;
this.name = name;
this.address = address;
this.gender = gender;
this.job = job;
}
}
enum Gender{
MALE(true),
FEMALE (false);
private boolean value;
Gender(boolean _value){
value = _value;
}
}
class Address {
@XmlAttribute
String country;
@XmlElement
String state;
@XmlElement
String city;
@XmlElement
String street;
String zipcode; //由於沒有新增@XmlElement,所以該元素不會出現在輸出的xml中
public Address() {
}
public Address(String country, String state, String city, String street, String zipcode) {
this.country = country;
this.state = state;
this.city = city;
this.street = street;
this.zipcode = zipcode;
}
public String getCountry() {
return country;
}
}
執行該程式,我們會得到一個person.xml的檔案,如下:
xml version="1.0" encoding="UTF-8" standalone="yes" ?>
控制檯會輸出
Country:China
最後,想說一點,除了JAXB之外,我們還可以透過XMLBeans和Castor等來實現同樣的功能。
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/750220/viewspace-889296/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Cache與主存之間的直接對映,全相聯對映和組項聯對映以及其地址變換
- UI與實體的對映UI
- ASP.NET Core 中的物件對映之 AutoMapperASP.NET物件APP
- 【mybatis xml】資料層框架應用--Mybatis 基於XML對映檔案實現資料的CRUDMyBatisXML框架
- MapStruct 解了物件對映的毒Struct物件
- Mybatis 基礎xml對映MyBatisXML
- 最淺顯易懂的使用nginx實現埠對映的教程Nginx
- PHP 使用連結串列實現對映PHP
- 『手寫Mybatis』實現對映器的註冊和使用MyBatis
- Fluent API 配置實體和資料庫之間的對映關係API資料庫
- 如何管理資料模型與業務模型之間對映?模型
- JSON 與 Java 物件之間的轉化JSONJava物件
- .NET 5 帶來的新特性 [MemberNotNull] 與 [MemberNotNullWhen]Null
- 萬字解析XML配置對映為BeanDefinition的原始碼XMLBean原始碼
- 使用ES6的新特性Proxy來實現一個資料繫結例項
- .NET CORE 中使用AutoMapper進行物件對映APP物件
- Atitit xml轉json總結 目錄 1.1. XML和JSON之間沒有直接對映;元素型別問題 1 1.2. Xml與json的對應關係 2 1.3. 範例 2 2. Jsonlib的問題,,不XMLJSON型別
- 使用使用者故事對映實現領域建模 - pulse
- 那些我所不知道前端的實現方式與新特性前端
- 物件對映 - Mapping.Mapster物件APP
- 元件使用總結:使用 JAXB 實現 XML檔案和java物件互轉元件XMLJava物件
- 使用 JGit 來實現 master 分支和 feature 分支之間的程式碼比對並獲取增量程式碼GitAST
- 特殊特性與FMEA之間的關係是什麼?
- Java8新特性之時間APIJavaAPI
- MyBatis實現一對一關聯對映MyBatis
- Mac 鍵盤與滑鼠的對映Mac
- Laravel 8 的新特性:時間旅行Laravel
- Javascript - 物件對映automapper介紹JavaScript物件APP
- java物件關係對映ROMJava物件
- [非專業翻譯] Mapster - 使用特性標籤配置對映
- 在.net中使用AutoMapper進行物件對映,物件相互轉,簡單方便APP物件
- kubernetes實踐之二十一:物件與元件簡介物件元件
- MySQL5.7新特性之備份工具mysqlpump的使用MySql
- 精盡MyBatis原始碼分析 - MyBatis初始化(二)之載入 Mapper 介面與 XML 對映檔案MyBatis原始碼APPXML
- 50.C++物件模型的分析(上)(C語言實現物件導向特性)C++物件模型C語言
- python實現兩字串對映詳解Python字串
- Linux 或 Windows 上實現埠對映LinuxWindows
- Superedge的新特性和未來之路
- Mapster 高效能物件對映框架物件框架