【问题标题】:Java: XML into a Database, whats the simplest way?Java:将 XML 导入数据库,最简单的方法是什么?
【发布时间】:2011-05-13 23:58:56
【问题描述】:

我有很多 XML 文件,还有一个 XSD。

我想简单地将其转换为 POJO 并将它们插入数据库。 数据库模式在我的控制之下,所以它可以是我喜欢的任何东西。

我已经查看了大量的 api,但想要另一种意见,什么是最有效的。

  • JAXB?
  • XMLBeans?
  • XPATH 到 DBUnit?

hibernate 是否有一些 api 可以从 XSD 创建 POJO,然后将 XML 读入这些 POJO,然后将数据插入数据库?

或者 spring 有什么功能可以帮助解决这个问题?

我想我只是在听你的意见,以防万一我错过了一个 API,它可以帮助我做我想做的事。

谢谢 杰夫·波特

【问题讨论】:

  • 你能选择你的数据库吗?如果是这样,你可以考虑exist-db,这是一个流行的开源XML数据库。

标签: java xml hibernate spring


【解决方案1】:

或者您可以绕过转换为 POJO 的步骤并将 XML 直接存储为 CLOB。稍后它将允许“鸭子打字”,您可能会觉得这很有利。

如果您以后需要单独查询这些对象,则映射到 Java POJO 是有意义的。如果您一直需要整个流,而不必在 XML 中查询值(例如 XPath),那么我会说将 XML 存储为 CLOB 更有意义。

【讨论】:

  • +1:我会这样做,另外提取选定的字段并将它们存储为额外的 indexed 列,以便我以后可以进行高速查找。当然,要提取的正确字段取决于需要的查询类型。
【解决方案2】:

快速回答:JAXB、JPA 和 Spring

将 XML 插入数据库时​​,您需要考虑您希望对 XML 所表示的数据执行哪些操作。

例如,您可以将 XML 视为输入数据,然后创建以易于查询的方式保存数据的模式。如果这是您想要做的,那么使用 JAXB 作为解组器,因为您可以通过 xjc 工具从 XSD 轻松生成适当注释的 pojos/entities。一些额外的 JPA 注释,您将拥有一个快速的解决方案,将 XML 映射到允许各种混合和匹配查询和替代视图的完整模式。当然,JAXB 注释可用于生成多种输出格式(XML、JSON、YAML 等),因此当您想要输出这些数据时,您不仅限于 XML。

接下来,您可以将 XML 视为您希望存储的完整实体。在这种情况下,您希望将其存储为 CLOB 或 XML(在 Oracle 中)。 Oracle certainly supports 基于 XPath 的搜索,因此您将获得查询结果数据集的好机会。

最后,如果您认为 XML 过于臃肿,并且您可以控制对 pojo 的任何更改,您可以将未编组的 pojo 作为 BLOB 直接序列化到数据库中。您将拥有一个相当紧凑的架构和数据库,但在查询方面您会受到影响,因为它都是二进制的。如果您必须基于旧的 pojo 反序列化一个非常旧的数据集,那么稍后您将遇到二进制版本的兼容性问题。

因此,总而言之,JAXB 是处理解组和后续编组过程的一种非常好的方法。它既快速又简单,并且(在此向@Blaise Doughan 点头)在 SO 上得到了很好的支持。 JPA 是执行数据库操作的首选技术。 Hibernate 是 JPA 的一种实现者(具有良好的扩展),Spring 通过 HibernateTemplate 很好地支持它。同样,您可以使用 Spring 的 JpaTemplate,它的学习曲线可能稍微浅一些。

【讨论】:

    【解决方案3】:

    一种常见的方法是使用 JPA(即 EclipseLink 或 Hibernate)将对象存储到数据库中,并使用 JAXB(即 Metro、EclipseLink MOXy(我是技术主管)或 JaxMe)进行转换将对象转换为 XML。

    EclipseLink JAXB (MOXy) 有许多用于将 JPA 实体映射到 XML 的扩展:

    【讨论】:

      猜你喜欢
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      • 2010-10-06
      • 2010-11-02
      • 2011-02-27
      • 1970-01-01
      相关资源
      最近更新 更多