栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

记录注解@MappedSuperclass和@XmlAccessorType

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

记录注解@MappedSuperclass和@XmlAccessorType

@XmlAccessorType详解

默认情况下,只有public 属性才会绑定到xml元素

package com.test;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="MyRootElement")
public class AccessorType {
    
    public String name;
    private String address;
    
    public void setName(String name) {
        this.name = name;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public static void main(String[] args) throws Exception {
        AccessorType root = new AccessorType();
        root.setName("ROSS");
        root.setAddress("GZ");
        
        JAXBContext context = JAXBContext.newInstance(AccessorType.class);
        Marshaller m = context.createMarshaller();
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        m.marshal(root, System.out);
    }   
}

输出如下,可以看到只有public的name被绑定了,而private的address没有。



    ROSS

使用@XmlAccessorType(XmlAccessType.FIELD)可以让所有member都被绑定

package com.test;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="MyRootElement")
@XmlAccessorType(XmlAccessType.FIELD)
public class AccessorType {
    
    public String name;
    private String address;
    
    public void setName(String name) {
        this.name = name;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public static void main(String[] args) throws Exception {
        AccessorType root = new AccessorType();
        root.setName("ROSS");
        root.setAddress("GZ");
        
        JAXBContext context = JAXBContext.newInstance(AccessorType.class);
        Marshaller m = context.createMarshaller();
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        m.marshal(root, System.out);
    }
}

输出



    ROSS
    
GZ

除了绑定member,还可以用@XmlAccessorType(XmlAccessType.PROPERTY)绑定getter/setter 对

package com.test;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="MyRootElement")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class AccessorType {
    
    public String name;
    private String address;
    
    public void setName(String name) {
        this.name = name;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public static void main(String[] args) throws Exception {
        AccessorType root = new AccessorType();
        root.setName("ROSS");
        root.setAddress("GZ");
        
        JAXBContext context = JAXBContext.newInstance(AccessorType.class);
        Marshaller m = context.createMarshaller();
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        m.marshal(root, System.out);
    }
    public String getNameAddress() {
        return name + " " + address;
    }
    public void setNameAddress(String nameAddress) {}
}

输出



    ROSS GZ

@MappedSuperclass

1.@MappedSuperclass注解使用在父类上面,是用来标识父类的

2.@MappedSuperclass标识的类表示其不能映射到数据库表,因为其不是一个完整的实体类,但是它所拥有的属性能够隐射在其子类对用的数据库表中

3.@MappedSuperclass标识得嘞不能再有@Entity或@Table注解

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/778735.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号