jaxb的优点和用法

一、jaxb是什么
    JAXB是Java Architecture for XML Binding的缩写。可以将一个Java对象转变成为XML格式,反之亦然。
    我们把对象与关系数据库之间的映射称为ORM,其实也可以把对象与XML之间的映射称为OXM(Object XML Mapping)。原来JAXB是Java EE的一部分,在JDK1.6中,SUN将其放到了Java SE中,这也是SUN的一贯做法。JDK1.6中自带的这个JAXB版本是2.0,比起1.0(JSR 31)来,JAXB2(JSR 222)用JDK5的新特性Annotation来标识要作绑定的类和属性等,这就极大简化了开发的工作量。
    二、jaxb应用模式
    在JAVA EE 5\6中,jaxb可以很方便的与jax-rs、jax-ws集成,极大的简化了web service接口的开发工作量。
    三、jaxb代码举例
第一步:需要引入 javax.xml.bind.jar
第二步:编写java bean;
package com.mkyong.core;
 
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
 
@XmlRootElement
public class Customer {
 
	String name;
	int age;
	int id;
 
	public String getName() {
		return name;
	}
 
	@XmlElement
	public void setName(String name) {
		this.name = name;
	}
 
	public int getAge() {
		return age;
	}
 
	@XmlElement
	public void setAge(int age) {
		this.age = age;
	}
 
	public int getId() {
		return id;
	}
 
	@XmlAttribute
	public void setId(int id) {
		this.id = id;
	}
 
}

第三步:main方法把java bean转化为xml字符串
package com.mkyong.core;
 
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
 
public class JAXBExample {
	public static void main(String[] args) {
 
	  Customer customer = new Customer();
	  customer.setId(100);
	  customer.setName("mkyong");
	  customer.setAge(29);
 
	  try {
 
		File file = new File("C:\\file.xml");
		JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
		Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
 
		// output pretty printed
		jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
 
		jaxbMarshaller.marshal(customer, file);
		jaxbMarshaller.marshal(customer, System.out);
 
	      } catch (JAXBException e) {
		e.printStackTrace();
	      }
 
	}
}

下面是输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="100">
    <age>29</age>
    <name>mkyong</name>
</customer>

四、jaxb开发常用
    jdk提供了xjc工具可以使xsd自动生成相应的java bean,这大大提高了开发的效率。同时,我们也可以使用 trang.jar把xml轻松转化为xsd。下面是使用的举例。

    第一步:把数据库表映射为xml

<?xml version="1.0" encoding="UTF-8"?>
<User u_id="1" u_name="moto" u_email="aaa@XXX.com" 
	u_mood="今天放假了" u_state="online" u_mobile="12345678901" 
	u_hometown="山西" u_job="IT软件工程师" u_avatar="w34353453543r53" />
第二步:使用 trang.jar转化为xsd文件。在命令行执行: 

java -jar D:\lib\trang.jar user.xml user.xsd
下面,是生成的User.java。
//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
// Any modifications to this file will be lost upon recompilation of the source schema. 
// Generated on: 2011.11.13 at 01:26:07 ���� CST 
//


package com.moto.server.bean;

import java.math.BigInteger;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;


/**
 * <p>Java class for anonymous complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * <complexType>
 *   <complexContent>
 *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       <attribute name="u_avatar" use="required" type="{http://www.w3.org/2001/XMLSchema}NCName" />
 *       <attribute name="u_email" use="required" type="{http://www.w3.org/2001/XMLSchema}anySimpleType" />
 *       <attribute name="u_hometown" use="required" type="{http://www.w3.org/2001/XMLSchema}NCName" />
 *       <attribute name="u_id" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
 *       <attribute name="u_job" use="required" type="{http://www.w3.org/2001/XMLSchema}NCName" />
 *       <attribute name="u_mobile" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
 *       <attribute name="u_mood" use="required" type="{http://www.w3.org/2001/XMLSchema}NCName" />
 *       <attribute name="u_name" use="required" type="{http://www.w3.org/2001/XMLSchema}NCName" />
 *       <attribute name="u_state" use="required" type="{http://www.w3.org/2001/XMLSchema}NCName" />
 *     </restriction>
 *   </complexContent>
 * </complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "")
@XmlRootElement(name = "User")
public class User {

    @XmlAttribute(name = "u_avatar", required = true)
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    @XmlSchemaType(name = "NCName")
    protected String uAvatar;
    @XmlAttribute(name = "u_email", required = true)
    @XmlSchemaType(name = "anySimpleType")
    protected String uEmail;
    @XmlAttribute(name = "u_hometown", required = true)
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    @XmlSchemaType(name = "NCName")
    protected String uHometown;
    @XmlAttribute(name = "u_id", required = true)
    protected BigInteger uId;
    @XmlAttribute(name = "u_job", required = true)
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    @XmlSchemaType(name = "NCName")
    protected String uJob;
    @XmlAttribute(name = "u_mobile", required = true)
    protected BigInteger uMobile;
    @XmlAttribute(name = "u_mood", required = true)
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    @XmlSchemaType(name = "NCName")
    protected String uMood;
    @XmlAttribute(name = "u_name", required = true)
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    @XmlSchemaType(name = "NCName")
    protected String uName;
    @XmlAttribute(name = "u_state", required = true)
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    @XmlSchemaType(name = "NCName")
    protected String uState;

    /**
     * Gets the value of the uAvatar property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getUAvatar() {
        return uAvatar;
    }

    /**
     * Sets the value of the uAvatar property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setUAvatar(String value) {
        this.uAvatar = value;
    }

    /**
     * Gets the value of the uEmail property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getUEmail() {
        return uEmail;
    }

    /**
     * Sets the value of the uEmail property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setUEmail(String value) {
        this.uEmail = value;
    }

    /**
     * Gets the value of the uHometown property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getUHometown() {
        return uHometown;
    }

    /**
     * Sets the value of the uHometown property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setUHometown(String value) {
        this.uHometown = value;
    }

    /**
     * Gets the value of the uId property.
     * 
     * @return
     *     possible object is
     *     {@link BigInteger }
     *     
     */
    public BigInteger getUId() {
        return uId;
    }

    /**
     * Sets the value of the uId property.
     * 
     * @param value
     *     allowed object is
     *     {@link BigInteger }
     *     
     */
    public void setUId(BigInteger value) {
        this.uId = value;
    }

    /**
     * Gets the value of the uJob property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getUJob() {
        return uJob;
    }

    /**
     * Sets the value of the uJob property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setUJob(String value) {
        this.uJob = value;
    }

    /**
     * Gets the value of the uMobile property.
     * 
     * @return
     *     possible object is
     *     {@link BigInteger }
     *     
     */
    public BigInteger getUMobile() {
        return uMobile;
    }

    /**
     * Sets the value of the uMobile property.
     * 
     * @param value
     *     allowed object is
     *     {@link BigInteger }
     *     
     */
    public void setUMobile(BigInteger value) {
        this.uMobile = value;
    }

    /**
     * Gets the value of the uMood property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getUMood() {
        return uMood;
    }

    /**
     * Sets the value of the uMood property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setUMood(String value) {
        this.uMood = value;
    }

    /**
     * Gets the value of the uName property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getUName() {
        return uName;
    }

    /**
     * Sets the value of the uName property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setUName(String value) {
        this.uName = value;
    }

    /**
     * Gets the value of the uState property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getUState() {
        return uState;
    }

    /**
     * Sets the value of the uState property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setUState(String value) {
        this.uState = value;
    }

}








评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值