будь-який інструмент для об'єкта Java для об'єднання об'єктів? [зачинено]


231

Я намагаюся перетворити DO на DTO за допомогою Java і шукаю автоматизований інструмент, перш ніж почати писати свій власний. Мені просто хотілося знати, чи є якийсь безкоштовний інструмент для того ж.


1
Джексон (бібліотека JSON) має метод new ObjectMapper().convertValue(...). У Джексона також є підтримка анотацій та мікстун-анотацій, тому я вважаю це дуже хорошим варіантом.
Саймон Форсберг

1
Ось стаття з різними рамками та порівнянням продуктивності. baeldung.com/java-performance-mapping-frameworks
Крістіан

Відповіді:


105

Ви можете спробувати Dozer .

Dozer - це перетворювач Java Bean to Java Bean, який рекурсивно копіює дані з одного об'єкта на інший. Зазвичай ці Java-боби будуть різних складних типів.

Dozer підтримує просте відображення властивостей, відображення складного типу, двонаправлене відображення, неявне явне відображення, а також рекурсивне відображення. Сюди входять атрибути колекції картографування, які також потребують відображення на рівні елементів.


24
Дуже довго після цього я приходжу зробити оновлення, сподіваюсь, що мій коментар буде прочитаний: Тепер Dozer здається мертвим, і хорошим варіантом є використання MapStruct, це легко (підтримка анотацій), швидко (без роздумів ) і здається захищеним (на даний момент). Це включено до списку @Pascal Thivent, але я раджу це (навіть якщо у мене виникли деякі проблеми з його використанням разом із lombok).
Олексій


394

Тут є кілька бібліотек:

  • Commons-BeanUtils : ConvertUtils -> Утилітні методи для перетворення рядкових скалярних значень в об'єкти вказаного класу, String масиви в масиви вказаного класу.

  • Commons-Lang : ArrayUtils -> Операції з масивами, примітивними масивами (як int []) та примітивними масивами обгортки (як Integer []).

  • Весняний каркас : Spring має чудову підтримку для PropertyEditors, яка також може бути використана для перетворення Об'єктів до / з Струн.

  • Dozer : Dozer - це потужний, але простий картограф Java Bean to Java Bean, який рекурсивно копіює дані з одного об'єкта на інший. Зазвичай ці Java-боби будуть різних складних типів.

  • ModelMapper : ModelMapper - це інтелектуальна рамка відображення об'єктів, яка автоматично відображає об'єкти один одному. Він використовує підхід, орієнтований на конвенцію, для відображення об'єктів, надаючи простий API для рефакторингу для обробки конкретних випадків використання.

  • MapStruct : MapStruct - це генератор коду часу компіляції для відображення квасолі, що призводить до швидкого (без використання відображення чи подібного), без залежностей і безпечного типу картографського коду під час виконання.

  • Orika : Orika використовує генерацію байтових кодів для створення швидких картографів з мінімальними накладними витратами.

  • Selma : Генератор коду часу компіляції для відображень

  • JMapper : Покоління картографів Bean за допомогою Анотації, XML або API (здається, мертвим, останній раз оновлено 2 роки тому)

  • Smooks : Картридж Smooks JavaBean дозволяє створювати та заповнювати об'єкти Java з ваших даних повідомлення (тобто прив'язувати дані) (запропоновані суперфіліном у коментарях). (Більше не в активному розвитку)

  • Commons-Convert : Commons-Convert має на меті забезпечити єдину бібліотеку, присвячену завданню перетворення об’єкта одного типу в інший. Перший етап буде зосереджений на перетворенні "Об'єкт в рядок" та "Рядок в об'єкт". (здається мертвим, останнє оновлення 2010 р.)

  • Transmorph : Transmorph - це безкоштовна бібліотека Java, яка використовується для перетворення об’єкта Java одного типу в об'єкт іншого типу (з іншою підписом, можливо, параметризованою). (здається мертвим, останнє оновлення 2013 р.)

  • EZMorph : EZMorph - проста бібліотека Java для перетворення Об'єкта на інший Об'єкт. Він підтримує перетворення примітивів та Об'єктів, для багатовимірних масивів та перетворень з DynaBeans (здається, мертвим, останнє оновлення 2008 р.)

  • Morph : Morph - це програма Java, яка полегшує внутрішню сумісність програми. Коли інформація протікає через додаток, вона зазнає багаторазових перетворень. Морф забезпечує стандартний спосіб здійснення цих перетворень. (здається мертвим, останнє оновлення 2008 р.)

  • Лоренц : Лоренц - це загальна рамка перетворення об'єкт-об'єкт. Він надає простий API для перетворення об’єктів Java одного типу в об’єкт іншого типу. (здається мертвим)

  • OTOM : За допомогою OTOM ви можете скопіювати будь-які дані з будь-якого об'єкта на будь-який інший об’єкт. Можливості безмежні. Ласкаво просимо на "Осінь". (здається мертвим)


жоден із списку не підтримує анотацію :(
ravinikam

1
Commons-Convert, здається, не просто спокійний, але повністю
відпав

Насправді, якщо ви хочете додати Moo до свого списку, я можу видалити свою відповідь, оскільки ваша відповідь явно набагато повніша. ;)
Джеффрі Вісман

3
Ще один варіант для Java 8+: erchu.github.io/bean-cp (відмова від відповідальності: я є автором цього проекту)
Рафал

1
@TmTron: Виконано, і я відредагував відповідь про видалення страйку та посилання на URL-адресу репо (оскільки на головній сторінці все ще посилається 0.7.5)
patric.schenke

31

Ще одна - Orika - https://github.com/orika-mapper/orika

Orika - це структура картографічного відображення Java Bean, яка рекурсивно копіює (серед інших можливостей) дані з одного об'єкта на інший. Це може бути дуже корисно при розробці багатошарових додатків.

Orika фокусується на максимальній автоматизації, забезпечуючи при цьому налаштування за допомогою конфігурації та розширення, де це необхідно.

Orika дозволяє розробнику:

  • Намітьте складні та глибоко структуровані об’єкти
  • "Зрівняти" або "Розгорнути" об'єкти, зіставивши вкладені властивості до властивостей верхнього рівня, і навпаки
  • Створіть картографи на ходу та застосуйте налаштування, щоб керувати деяким чи всім відображенням
  • Створіть перетворювачі для повного контролю над відображенням певного набору об'єктів у будь-якій точці графіка об'єкта - за типом або навіть за конкретною назвою властивості
  • Обробляйте проксі-сервери або вдосконалені об'єкти (наприклад, у сплячому режимі чи різні макетні рамки)
  • Застосовуйте двонаправлене відображення в одній конфігурації
  • Відображайте екземпляри відповідного конкретного класу для цільового абстрактного класу чи інтерфейсу
  • Обробляти зворотні відображення
  • Обробляйте складні умови за межами специфікацій JavaBean.

Orika використовує генерацію байтових кодів для створення швидких картографів із мінімальними накладними витратами.


2
Ви можете надати кілька слів про orika - чим він відрізняється від інших
Olimpiu POP

Напевно, це набагато швидше, ніж Dozer - бульдозер тихо повільний.
Ондрей Божек

21

ModelMapper - ще одна бібліотека, яку варто перевірити. Дизайн ModelMapper відрізняється від інших бібліотек тим, що він:

  • Автоматично відображає об'єктні моделі за допомогою інтелектуального відповідності джерелам та властивостям призначення
  • Забезпечує API безпечного відображення для рефакторингу, який використовує фактичний код для відображення полів та методів, а не використання рядків
  • Використовує конфігурацію, засновану на конвенції, для простого користування спеціальними сценаріями

Перегляньте сайт ModelMapper для отримання додаткової інформації:

http://modelmapper.org


13

Використовуйте beanutils Apache:

static void copyProperties(Object dest, Object orig) -Копіюйте значення властивостей з початкового джерела в бій призначення для всіх випадків, коли назви властивостей однакові.

http://commons.apache.org/proper/commons-beanutils/


3
Так, але властивості, які знаходяться в початковій квасолі, але не вказані в квасолі, просто ігноруються. Все одно дякую Pablojim :) Я думаю, що я повинен поїхати з Dozer, оскільки у нас є деякі назви властивостей, різні для DO і DTO :(
ravinikam

1
Досить справедливо - я цього не знав ... Список Паскаля був досить вражаючим!
Паблохім


3

Я пропоную спробувати JMapper Framework .

Це Java-перетворювач Java на картографічний компонент Java, дозволяє динамічно виконувати проходження даних за допомогою анотацій та / або XML.

З JMapper ви можете:

  • Створення та збагачення цільових об’єктів
  • Застосуйте конкретну логіку до відображення
  • Автоматично керувати XML-файлом
  • Реалізуйте відносини 1 до N та N до 1
  • Здійснюйте явні перетворення
  • Застосувати успадковані конфігурації

2

Я радий додати Moo як варіант, хоча я чітко упереджений до цього: http://geoffreywiseman.github.com/Moo/

Це дуже просто у використанні для простих випадків, розумних для складних випадків, хоча все-таки є деякі сфери, де я можу уявити, що можна підвищити його для ще більш складних ситуацій.


2

Ви також можете спробувати структуру картографування на основі Dozer, але з декларацією відображення Excel. У них є деякі інструменти та додаткові цікаві функції. Перевірте на http://openl-tablets.sf.net/mapper

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.