`
234390216
  • 浏览: 10229921 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462463
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775250
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398182
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:394950
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:679881
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530776
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1183608
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:467463
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151280
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68026
社区版块
存档分类
最新评论

Java与XML映射利器

    博客分类:
  • JAXB
阅读更多

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开发详解,可以让你收获更多。

0
1
分享到:
评论

相关推荐

    xmlbean轻轻松松读写XML的利器

    - **提高开发效率**:XMLBean自动生成与XML文档结构对应的Java类,从而减少了手动编码的需求。 - **灵活性**:支持复杂的XML结构,并能根据需求进行定制化的配置。 #### 三、XMLBean的工作原理及示例 **工作原理**...

    castor插件java对象和XML自动绑定maping文件生成和java对象一键生成工具1.2

    总之,"castor插件java对象和XML自动绑定mapping文件生成和java对象一键生成工具1.2"是提升XML处理效率的利器,它简化了Java和XML之间的交互,使得开发过程更为流畅。X2MUTIL可能是该工具包的主程序或执行文件,用于...

    ssm动态生成实体,mapper接口,.xml映射文件

    综上所述,mybatisGeneratorSqlmapper是SSM开发中的利器,通过它,你可以快速地生成符合规范的实体类、Mapper接口和XML映射文件,从而将更多精力集中在业务逻辑的实现上。掌握并合理使用这样的工具,能够显著提升...

    mybatis xml generator

    - 结果检查:生成的文件会出现在指定的输出目录下,包括Java实体类、Mapper接口和XML映射文件。 5. 压缩包`mybatis-generator-gui`:这可能是MyBatis Generator的一个图形用户界面版本,它提供了一个可视化的界面...

    sqlserver Ibatis XML自动生成工具

    总结来说,SQLServer Ibatis XML自动生成工具是Java开发中的得力助手,尤其适合于处理Ibatis的XML映射文件生成。它通过自动化的方式,帮助开发者快速创建和维护数据库操作的映射文件,从而提高开发速度,降低错误率...

    generator-mybatis接口类、实体类、xml文件生成工具

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 generator-mybatis工具的核心功能包括: 1. 接口类生成:根据数据库表...

    mybatis dao xml 代码生成工具

    在上述配置中,`jdbcConnection`部分配置了数据库连接信息,`javaModelGenerator`、`sqlMapGenerator`和`javaClientGenerator`分别指定了生成的Java模型类、XML映射文件和DAO接口的目录。`table`元素则用来指定要...

    利用commons-digester解析xml

    这个库提供了一种方便的方式来映射XML文档结构到Java对象,从而简化了XML数据的处理过程。 Apache Commons Digester是Apache Commons项目的一部分,它允许开发者通过定义一系列的规则(Rules)来解析XML文档,这些...

    Hibernate逆向生成entity和hbm.xml文件

    实体类是Java对象,它们代表数据库中的表,而hbm.xml文件则是Hibernate的映射文件,用于定义实体类与数据库表之间的对应关系。在实际开发中,当数据库表结构已经设计好时,使用Hibernate的逆向工程工具可以自动创建...

    generator.rar

    《generator.rar:构建XML映射文件与数据库交互的利器》 在Java开发中,数据库的交互是不可或缺的一部分,而XML映射文件则是连接数据库与Java代码的重要桥梁。generator.rar文件提供了一个工具,能够帮助开发者自动...

    dom4j--java框架技术

    - Hibernate框架:在映射XML文件中,DOM4J用于定义ORM映射,帮助处理数据库对象与Java类之间的关系。 6. **性能优化** - 使用SAXReader进行流式解析,减少内存消耗。 - 使用Element的detach()方法,断开不再使用...

    Java开发利器Myeclipse全面详解第11章代码

    Hibernate则是一个优秀的持久层框架,它简化了数据库操作,通过ORM(Object-Relational Mapping)技术将Java对象与数据库表映射,使得开发者可以像操作对象一样操作数据库。在MyEclipse中,我们可以通过Hibernate...

    mybatis 生成实体类工程 增删改查接口mapper.xml 只需要自己写业务。就是这么流弊

    总的来说,这个工具是Java开发中的利器,尤其对于基于MyBatis的项目,它极大地减轻了开发负担,提升了开发效率。在实际开发中,我们应充分利用这类工具,以实现快速迭代和高质量的代码生产。同时,掌握如何有效地...

    XML数据转换

    在实际开发中,有许多工具和库可以帮助进行XML转换,例如Java的JAXB、XMLBeans,Python的lxml,以及命令行工具如xsltproc(XSLT处理器)和xmlstarlet。这些工具提供了方便的API和命令行选项,使得XML转换变得简单。 ...

    generator自动生成Mybatis实体以及映射文件

    实体类代表了数据库中的表,Mapper接口定义了数据库操作的方法,而XML映射文件则包含了SQL语句和结果映射,实现了SQL与Java代码的解耦。 在使用generator之前,我们需要进行必要的配置。创建一个`generatorConfig....

    txt_to_xml.jar包

    《txt_to_xml.jar包:将文本转换为XML的利器》 在信息技术领域,数据的存储和交换格式多种多样,XML(eXtensible Markup Language)因其结构化、可扩展的特性,广泛应用于数据交换和存储。然而,面对大量的txt文本...

    XmL Tag生成器

    总结来说,"XmL Tag生成器"是数据库读取优化的利器,它通过高效策略和技术手段,实现了对海量数据的快速处理,是我们在大数据时代应对挑战的有效工具。理解并掌握其工作原理,对于提升我们的开发技能和解决实际问题...

    Digester解析XML的小例子(对象嵌套)

    在Java开发中,Struts框架提供了一个强大的工具——Digester,用于解析XML...通过理解和熟练使用 Digester,开发者可以提高工作效率,减少代码量,同时使得XML配置与Java代码之间的耦合度降低,提高了系统的可维护性。

    解析pdm生成pojo(java代码生成器)

    HBM文件是XML格式的,其中包含了类名、表名、属性与列的映射等信息。 "解析PDM生成JavaBean"是指通过读取PDM文件,自动分析表结构,然后自动生成对应的JavaBean类。这样可以极大地节省开发者手动编写这些基础类的...

Global site tag (gtag.js) - Google Analytics