¿Alguna herramienta para el mapeo de objeto a objeto de Java? [cerrado]
231
Estoy tratando de convertir DO a DTO usando Java y buscando una herramienta automatizada antes de comenzar a escribir la mía. Solo quería saber si hay alguna herramienta gratuita disponible para lo mismo.
Jackson (la biblioteca JSON) tiene un método new ObjectMapper().convertValue(...). Jackson también tiene soporte para anotaciones y anotación-mixins, así que me parece una muy buena opción.
Dozer es un mapeador de Java Bean a Java Bean que copia recursivamente datos de un objeto a otro. Por lo general, estos Java Beans serán de diferentes tipos complejos.
Dozer admite mapeo de propiedad simple, mapeo de tipo complejo, mapeo bidireccional, mapeo implícito-explícito, así como mapeo recursivo. Esto incluye los atributos de la colección de mapeo que también necesitan mapeo a nivel de elemento.
Mucho, mucho tiempo después, vengo a hacer una actualización, espero que se lea mi comentario: ahora Dozer parece estar muerto, y una buena opción es usar MapStruct, es fácil (anotaciones de soporte), rápido (sin reflexión ) y parece seguro (por el momento). Sin embargo, esto está incluido en la lista @Pascal Thivent, pero lo recomiendo (incluso si tuve algunos problemas al usarlo junto con lombok).
Commons-BeanUtils : ConvertUtils -> Métodos de utilidad para convertir valores escalares de cadena en objetos de la clase especificada, matrices de cadena en matrices de la clase especificada.
Commons-Lang : ArrayUtils -> Operaciones en matrices, matrices primitivas (como int []) y matrices envolvedoras primitivas (como Integer []).
Spring framework : Spring tiene un excelente soporte para PropertyEditors, que también se puede usar para transformar objetos a / desde cadenas.
Dozer : Dozer es un mapeador de Java Bean a Java Bean potente pero simple que copia recursivamente datos de un objeto a otro. Por lo general, estos Java Beans serán de diferentes tipos complejos.
ModelMapper : ModelMapper es un marco inteligente de mapeo de objetos que automáticamente mapea objetos entre sí. Utiliza un enfoque basado en convenciones para asignar objetos al tiempo que proporciona una API segura de refactorización simple para manejar casos de uso específicos.
MapStruct : MapStruct es un generador de código en tiempo de compilación para mapeos de beans, que da como resultado un código de mapeo rápido (sin uso de reflejo o similar), sin dependencia y de tipo seguro en tiempo de ejecución.
Orika : Orika utiliza la generación de código de bytes para crear mapeadores rápidos con una sobrecarga mínima.
Selma : generador de código en tiempo de compilación para mapeos
JMapper : generación de Bean Mapper usando Anotación, XML o API (parece muerto, última actualización hace 2 años)
Smooks : Smooks JavaBean Cartridge le permite crear y llenar objetos Java a partir de los datos de su mensaje (es decir, vincular datos a) (sugerido por superfilin en los comentarios). (Ya no está en desarrollo activo)
Commons-Convert : Commons-Convert tiene como objetivo proporcionar una biblioteca única dedicada a la tarea de convertir un objeto de un tipo a otro. La primera etapa se centrará en las conversiones de Objeto a Cadena y de Cadena a Objeto. (parece muerto, última actualización 2010)
Transmorph : Transmorph es una biblioteca gratuita de Java utilizada para convertir un objeto Java de un tipo en un objeto de otro tipo (con otra firma, posiblemente parametrizada). (parece muerto, última actualización 2013)
EZMorph : EZMorph es una biblioteca simple de Java para transformar un Objeto en otro Objeto. Admite transformaciones para primitivas y objetos, para matrices multidimensionales y transformaciones con DynaBeans (parece muerto, última actualización 2008)
Morph : Morph es un marco de Java que facilita la interoperabilidad interna de una aplicación. A medida que la información fluye a través de una aplicación, sufre múltiples transformaciones. Morph proporciona una forma estándar de implementar estas transformaciones. (parece muerto, última actualización 2008)
Lorentz : Lorentz es un marco genérico de conversión de objeto a objeto. Proporciona una API simple para convertir objetos Java de un tipo en un objeto de otro tipo. (parece muerto)
OTOM : Con OTOM, puede copiar cualquier dato de cualquier objeto a cualquier otro objeto. Las posibilidades son infinitas. Bienvenido a "Otoño". (parece muerto)
Commons-Convert parece no solo inactivo, sino que se ha ido por completo ahora ...
Jim Ferrans
En realidad, si desea agregar Moo a su lista, entonces puedo eliminar mi respuesta, ya que su respuesta es claramente mucho más completa. ;)
Geoffrey Wiseman
3
Otra opción para Java 8+: erchu.github.io/bean-cp (descargo de responsabilidad: soy el autor de este proyecto)
Rafal
1
@TmTron: Hecho y edité la respuesta para eliminar la huelga y hacer referencia a la URL del repositorio (ya que la página principal todavía hace referencia a 0.7.5)
Orika es un marco de mapeo de Java Bean que copia recursivamente (entre otras capacidades) datos de un objeto a otro. Puede ser muy útil al desarrollar aplicaciones de varias capas.
Orika se enfoca en automatizar tanto como sea posible, al tiempo que proporciona personalización a través de la configuración y extensión donde sea necesario.
Orika permite al desarrollador:
Mapear objetos complejos y profundamente estructurados
"Acoplar" o "Expandir" objetos asignando propiedades anidadas a propiedades de nivel superior, y viceversa
Cree mapeadores sobre la marcha y aplique personalizaciones para controlar parte o la totalidad del mapeo
Cree convertidores para un control completo sobre la asignación de un conjunto específico de objetos en cualquier parte del gráfico de objetos, por tipo o incluso por nombre de propiedad específico
Manejar proxies u objetos mejorados (como los de Hibernate, o los diversos marcos simulados)
Aplicar mapeo bidireccional con una configuración
Asignar a instancias de una clase concreta apropiada para una clase o interfaz abstracta de destino
Manejar asignaciones inversas
Maneje convenciones complejas más allá de las especificaciones JavaBean.
Orika utiliza la generación de código de bytes para crear mapeadores rápidos con una sobrecarga mínima.
static void copyProperties(Object dest, Object orig)
-Copie los valores de propiedad del bean de origen al bean de destino para todos los casos en que los nombres de las propiedades sean los mismos.
sí, pero las propiedades que están en el bean de origen, pero no en el bean de destino, simplemente se ignoran. Gracias de todos modos Pablojim :) Creo que tengo que ir con Dozer ya que tenemos algunos nombres de propiedad diferentes para DO y DTO :(
ravinikam
1
Bien, no sabía esto ... ¡La lista de Pascal era bastante impresionante!
Es muy fácil de usar para casos simples, razonablemente apto para casos más complejos, aunque todavía hay algunas áreas donde puedo imaginar mejorarlo para complejidades aún más.
También puede probar el marco de mapeo basado en Dozer, pero con la declaración de mapeo de Excel. Tienen algunas herramientas y características adicionales interesantes. Verifique en http://openl-tablets.sf.net/mapper
new ObjectMapper().convertValue(...)
. Jackson también tiene soporte para anotaciones y anotación-mixins, así que me parece una muy buena opción.Respuestas:
Podrías probar Dozer .
fuente
Hay algunas bibliotecas por ahí:
Commons-BeanUtils : ConvertUtils -> Métodos de utilidad para convertir valores escalares de cadena en objetos de la clase especificada, matrices de cadena en matrices de la clase especificada.
Commons-Lang : ArrayUtils -> Operaciones en matrices, matrices primitivas (como int []) y matrices envolvedoras primitivas (como Integer []).
Spring framework : Spring tiene un excelente soporte para PropertyEditors, que también se puede usar para transformar objetos a / desde cadenas.
Dozer : Dozer es un mapeador de Java Bean a Java Bean potente pero simple que copia recursivamente datos de un objeto a otro. Por lo general, estos Java Beans serán de diferentes tipos complejos.
ModelMapper : ModelMapper es un marco inteligente de mapeo de objetos que automáticamente mapea objetos entre sí. Utiliza un enfoque basado en convenciones para asignar objetos al tiempo que proporciona una API segura de refactorización simple para manejar casos de uso específicos.
MapStruct : MapStruct es un generador de código en tiempo de compilación para mapeos de beans, que da como resultado un código de mapeo rápido (sin uso de reflejo o similar), sin dependencia y de tipo seguro en tiempo de ejecución.
Orika : Orika utiliza la generación de código de bytes para crear mapeadores rápidos con una sobrecarga mínima.
Selma : generador de código en tiempo de compilación para mapeos
JMapper : generación de Bean Mapper usando Anotación, XML o API(parece muerto, última actualización hace 2 años)Smooks : Smooks JavaBean Cartridge le permite crear y llenar objetos Java a partir de los datos de su mensaje (es decir, vincular datos a) (sugerido por superfilin en los comentarios).(Ya no está en desarrollo activo)Commons-Convert : Commons-Convert tiene como objetivo proporcionar una biblioteca única dedicada a la tarea de convertir un objeto de un tipo a otro. La primera etapa se centrará en las conversiones de Objeto a Cadena y de Cadena a Objeto. (parece muerto, última actualización 2010)Transmorph : Transmorph es una biblioteca gratuita de Java utilizada para convertir un objeto Java de un tipo en un objeto de otro tipo (con otra firma, posiblemente parametrizada).(parece muerto, última actualización 2013)EZMorph : EZMorph es una biblioteca simple de Java para transformar un Objeto en otro Objeto. Admite transformaciones para primitivas y objetos, para matrices multidimensionales y transformaciones con DynaBeans(parece muerto, última actualización 2008)Morph : Morph es un marco de Java que facilita la interoperabilidad interna de una aplicación. A medida que la información fluye a través de una aplicación, sufre múltiples transformaciones. Morph proporciona una forma estándar de implementar estas transformaciones.(parece muerto, última actualización 2008)Lorentz : Lorentz es un marco genérico de conversión de objeto a objeto. Proporciona una API simple para convertir objetos Java de un tipo en un objeto de otro tipo.(parece muerto)OTOM : Con OTOM, puede copiar cualquier dato de cualquier objeto a cualquier otro objeto. Las posibilidades son infinitas. Bienvenido a "Otoño".(parece muerto)fuente
Otra es Orika - https://github.com/orika-mapper/orika
fuente
ModelMapper es otra biblioteca que vale la pena consultar. El diseño de ModelMapper es diferente de otras bibliotecas en que:
Consulte el sitio de ModelMapper para obtener más información:
http://modelmapper.org
fuente
Utilice los comunes de Apache beanutils:
http://commons.apache.org/proper/commons-beanutils/
fuente
Hay un motor / marco de mapeo Java más Nomin: http://nomin.sourceforge.net .
fuente
Te sugiero que pruebes JMapper Framework .
Es un mapeador de Java Bean a Java Bean, le permite realizar el paso de datos dinámicamente con anotaciones y / o XML.
Con JMapper puedes:
fuente
Estoy feliz de agregar Moo como una opción, aunque claramente soy parcial hacia él: http://geoffreywiseman.github.com/Moo/
Es muy fácil de usar para casos simples, razonablemente apto para casos más complejos, aunque todavía hay algunas áreas donde puedo imaginar mejorarlo para complejidades aún más.
fuente
También puede probar el marco de mapeo basado en Dozer, pero con la declaración de mapeo de Excel. Tienen algunas herramientas y características adicionales interesantes. Verifique en http://openl-tablets.sf.net/mapper
fuente