Подтвердить что ты не робот

Java: XML в базу данных, какой самый простой способ?

У меня есть загрузка XML файлов и XSD для них.

Я хотел бы просто преобразовать в POJO и вставить их в базу данных. Схема DB находится под моим контролем, так что это может быть то, что мне нравится.

Я огляделся вокруг нагрузки apis, но хотел получить другое мнение, что лучше всего работает.

  • JAXB?
  • XMLBeans?
  • XPATH для DBUnit?

У hibernate есть api для создания POJO из XSD, затем прочитайте XML в этих POJO, а затем вставьте данные в базу данных?

Или есть spring какие-либо функции, чтобы помочь с этим?

Я предполагаю, что я сразу после ваших взглядов, просто если есть API, который я пропустил, это поможет сделать то, что я хочу.

Спасибо Джефф Портер

4b9b3361

Ответ 1

Или вы можете обойти шаг перевода в POJO и хранить XML непосредственно в виде CLOB. В дальнейшем это позволит "утиная печать", что может показаться вам выгодным.

Сопоставление с Java POJO имеет смысл, если вам нужно позже запросить эти объекты. Если вам нужен весь поток, все время, без необходимости запрашивать значения в XML (например, XPath), я бы сказал, что хранение XML в виде CLOB имеет больше смысла.

Ответ 2

Быстрый ответ: JAXB, JPA и Spring

При вставке XML в базу данных вам необходимо рассмотреть, какие операции вы хотите выполнять над данными, которые представляет XML.

Вы могли бы, например, рассмотреть XML как входные данные, а затем создать схему, которая содержит данные в удобной для пользователя форме. Если это то, что вы хотели бы сделать, используйте JAXB как unmarshaller, потому что вы можете легко создавать подходящие аннотированные поля/сущности из XSD с помощью инструмента xjc. Немного дополнительной JPA-аннотации, и у вас будет быстрое решение, которое отображает XML в полную схему, позволяющую использовать различные сочетания и совпадения запросов и альтернативных представлений. Конечно, аннотации JAXB могут использоваться для генерации широкого спектра выходных форматов (XML, JSON, YAML и т.д.), Поэтому вы не ограничены XML, когда хотите вывести эти данные.

Затем вы могли бы считать, что XML - это полная сущность, которую вы хотите сохранить. В этом случае вы хотите сохранить его либо как CLOB, либо как XML (в Oracle). Oracle, безусловно, поддерживает поиск на основе XPath, поэтому вы получите хорошую возможность для запроса результирующего набора данных.

Наконец, если вы думаете, что XML слишком раздутый, и вы контролируете любые результирующие изменения в pojos, вы можете сериализовать unmarshalled pojos непосредственно в базу данных как BLOB. У вас будет довольно компактная схема и база данных, но вы будете страдать, когда дело доходит до запросов, поскольку все это будет бинарным. И позже вы столкнетесь с проблемами совместимости с двоичными версиями, если вам придется десериализовать очень старый набор данных на основе старых pojos.

Итак, чтобы подвести итог, JAXB - очень хороший способ справиться с процессами unmarshalling и later marshalling. Это быстро и просто и (поклониться @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: