Java: 将XML存入数据库,最简单的方法是什么?

11

我有一堆XML文件和一个XSD

我希望将它们简单地转换为POJO,然后插入数据库中。数据库架构由我控制,所以可以随意设计。

我查看了大量API,但想听听其他人的意见,哪个最好用。

  • JAXB?
  • XMLBeans?
  • XPATH到DBUnit?

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

或者Spring是否有任何功能来帮助处理这个问题?

我猜我只是想听听你的意见,万一有我错过的API可以帮助我做我想做的事情。

谢谢 Jeff Porter


你可以选择自己的数据库吗?如果可以的话,你可以考虑使用exist-db,这是一个流行的开源XML数据库。 - JasonPlutext
3个回答

4

或者您可以跳过将XML转换为POJO的步骤,直接将XML存储为CLOB。这将允许后续进行“鸭子类型”,您可能会发现它很有优势。

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


+1:我会这样做,同时提取所选字段并将它们存储为额外的“索引”列,以便稍后可以进行高速查找。当然,要提取的正确字段取决于将要查询的类型。 - Donal Fellows

2
快速答案:JAXB、JPA和Spring
将XML插入数据库时,需要考虑对表示XML的数据执行哪些操作。例如,您可以将XML视为输入数据,然后创建一个模式,以便以易于查询的方式存储数据。如果您想要这样做,那么请使用JAXB作为解组器,因为您可以通过xjc工具轻松生成适当注释的pojos /实体,从XSD中获取它们。稍加额外的JPA注释,您就会拥有一个快速解决方案,它将XML映射到完整的模式,允许各种混合和匹配查询和替代视图。当然,JAXB注释可用于生成各种输出格式(XML、JSON、YAML等),因此在要输出此数据时,您不会受到XML的限制。
接下来,你可以考虑将XML视为你想要存储的完整实体。在这种情况下,你希望将其存储为CLOB或XML(在Oracle中)。Oracle肯定支持基于XPath的搜索,因此你会有很好的查询结果数据集的机会。
最后,如果你认为XML太臃肿,并且你控制着任何导致pojos更改的结果,你可以直接将未解组的pojos序列化为数据库中的BLOB。你将拥有一个相当紧凑的架构和数据库,但在查询时你会遇到困难,因为所有内容都是二进制的。如果你必须反序列化基于旧pojos的非常旧的数据集,你将面临二进制版本兼容性问题。
因此,总结一下,JAXB 是处理反序列化和序列化过程的非常好的方式。它快速简便,并且在 @Blaise Doughan 的支持下,在 SO 上得到了很好的支持。JPA 是执行数据库操作的首选技术。Hibernate 是 JPA 的一个实现者(具有良好的扩展性),Spring 通过 HibernateTemplate 美妙地支持它。同样,您也可以使用 Spring 的 JpaTemplate,其学习曲线可能略微陡峭。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接