alguma ferramenta para mapeamento de objeto java para objeto? [fechadas]

231

Estou tentando converter DO para DTO usando java e procurando uma ferramenta automatizada antes de começar a escrever o meu. Eu só queria saber se existe alguma ferramenta gratuita disponível para o mesmo.

ravinikam
fonte
1
Jackson (a biblioteca JSON) tem um método new ObjectMapper().convertValue(...). Jackson também tem suporte para anotações e mixagens de anotações, então acho uma ótima opção.
Simon Forsberg
1
Aqui está um artigo com diferentes estruturas e comparação de desempenho. baeldung.com/java-performance-mapping-frameworks
Christian

Respostas:

105

Você poderia tentar Dozer .

O Dozer é um mapeador Java Bean para Java Bean que copia recursivamente dados de um objeto para outro. Normalmente, esses Java Beans serão de diferentes tipos complexos.

O Dozer suporta mapeamento de propriedades simples, mapeamento de tipos complexos, mapeamento bidirecional, mapeamento implícito-explícito, bem como mapeamento recursivo. Isso inclui atributos de coleção de mapeamento que também precisam de mapeamento no nível do elemento.

skaffman
fonte
24
Muito tempo depois, venho fazer uma atualização, espero que meu comentário seja lido: Agora o Dozer parece estar morto, e uma boa opção é usar o MapStruct, é fácil (anotações de suporte), rápido (sem reflexão) ) e parece seguro (no momento). Porém, isso está incluído na lista do @Pascal Thivent, mas eu o aconselho (mesmo que eu tenha tido alguns problemas ao usá-lo junto com o lombok).
Alex
2
O Dozer parece revivido com a versão 6: mvnrepository.com/artifact/com.github.dozermapper/dozer-core #
tkruse
394

Existem algumas bibliotecas por aí:

  • Commons-BeanUtils : ConvertUtils -> métodos utilitários para converter valores escalares de String em objetos da Classe especificada, matrizes de String em matrizes da Classe especificada.

  • Commons-Lang : ArrayUtils -> Operações em matrizes, matrizes primitivas (como int []) e matrizes wrapper primitivas (como Integer []).

  • Estrutura Spring : O Spring oferece um excelente suporte para PropertyEditors, que também podem ser usados ​​para transformar objetos de / para Strings.

  • Dozer : O Dozer é um mapeador poderoso, mas simples, de Java Bean para Java Bean que copia recursivamente dados de um objeto para outro. Normalmente, esses Java Beans serão de diferentes tipos complexos.

  • ModelMapper : ModelMapper é uma estrutura inteligente de mapeamento de objetos que mapeia automaticamente objetos entre si. Ele usa uma abordagem baseada em convenções para mapear objetos enquanto fornece uma API segura de refatoração simples para lidar com casos de uso específicos.

  • MapStruct : MapStruct é um gerador de código em tempo de compilação para mapeamentos de bean, resultando em código de mapeamento rápido (sem uso de reflexão ou similar), sem dependência e com segurança de tipo em tempo de execução.

  • Orika : O Orika usa geração de código de bytes para criar mapeadores rápidos com sobrecarga mínima.

  • Selma : gerador de código em tempo de compilação para mapeamentos

  • JMapper : geração de mapeador de beans usando anotação, XML ou API (parece morto, última atualização 2 anos atrás)

  • Smooks : O Cartucho JavaBean Smooks permite criar e preencher objetos Java a partir dos dados da mensagem (por exemplo, vincular dados a) (sugerido pela superfilina nos comentários). (Não está mais em desenvolvimento ativo)

  • Commons-Convert : O Commons-Convert visa fornecer uma única biblioteca dedicada à tarefa de converter um objeto de um tipo para outro. O primeiro estágio se concentrará nas conversões Objeto para String e String para Objeto. (parece morto, última atualização 2010)

  • Transmorph : Transmorph é uma biblioteca java gratuita usada para converter um objeto Java de um tipo em um objeto de outro tipo (com outra assinatura, possivelmente parametrizada). (parece morto, última atualização de 2013)

  • EZMorph : O EZMorph é uma biblioteca java simples para transformar um Objeto em outro Objeto. Ele suporta transformações para primitivos e objetos, para matrizes multidimensionais e transformações com o DynaBeans (parece morto, última atualização em 2008).

  • Morph : Morph é uma estrutura Java que facilita a interoperabilidade interna de um aplicativo. À medida que a informação flui através de um aplicativo, ela passa por várias transformações. Morph fornece uma maneira padrão de implementar essas transformações. (parece morto, última atualização de 2008)

  • Lorentz : Lorentz é uma estrutura genérica de conversão de objeto para objeto. Ele fornece uma API simples para converter objetos Java de um tipo em um objeto de outro tipo. (parece morto)

  • OTOM : Com o OTOM, você pode copiar qualquer dado de qualquer objeto para qualquer outro objeto. As possibilidades são infinitas. Bem-vindo ao "outono". (parece morto)

Pascal Thivent
fonte
nenhum da anotação Lista suportes :(
ravinikam
1
Commons-Convert parece não apenas adormecida, mas completamente desaparecido agora ...
Jim Ferrans
Na verdade, se você quiser adicionar o Moo à sua lista, posso remover minha resposta, pois sua resposta é claramente muito mais completa. ;)
Geoffrey Wiseman
3
Outra opção para Java 8+: erchu.github.io/bean-cp (disclaimer: Eu sou o autor deste projeto)
Rafal
1
@TmTron: Feito e eu editei a resposta para remover a greve e fazer referência a URL repo (desde que a página principal ainda referências 0.7.5)
patric.schenke
31

Outro é o Orika - https://github.com/orika-mapper/orika

Orika é uma estrutura de mapeamento Java Bean que copia recursivamente (entre outros recursos) dados de um objeto para outro. Pode ser muito útil ao desenvolver aplicativos de várias camadas.

A Orika se concentra em automatizar o máximo possível, ao mesmo tempo em que fornece personalização através da configuração e extensão, quando necessário.

Orika permite que o desenvolvedor:

  • Mapear objetos complexos e profundamente estruturados
  • "Achatar" ou "Expandir" objetos mapeando propriedades aninhadas para propriedades de nível superior e vice-versa
  • Crie mapeadores on-the-fly e aplique personalizações para controlar parte ou todo o mapeamento
  • Crie conversores para controle completo sobre o mapeamento de um conjunto específico de objetos em qualquer lugar do gráfico de objetos - por tipo ou mesmo por nome de propriedade específico
  • Manipule proxies ou objetos aprimorados (como os do Hibernate ou as várias estruturas simuladas)
  • Aplique mapeamento bidirecional com uma configuração
  • Mapeie para instâncias de uma classe concreta apropriada para uma classe ou interface abstrata de destino
  • Manipular mapeamentos reversos
  • Manipule convenções complexas além das especificações do JavaBean.

A Orika usa a geração de código de bytes para criar mapeadores rápidos com sobrecarga mínima.

Tomas
fonte
2
você poderia fornecer algumas palavras sobre Orika - o que o torna diferente dos outros
Olimpiu POP
Provavelmente é muito mais rápido que o Dozer - o dozer é silenciosamente lento.
Ondrej Bozek
21

ModelMapper é outra biblioteca que vale a pena conferir. O design do ModelMapper é diferente de outras bibliotecas, pois:

  • Mapeia automaticamente modelos de objeto, correspondendo de maneira inteligente às propriedades de origem e destino
  • Fornece uma API de mapeamento seguro para refatoração que usa código real para mapear campos e métodos em vez de usar cadeias
  • Utiliza configuração baseada em convenção para manipulação simples de cenários personalizados

Confira o site ModelMapper para obter mais informações:

http://modelmapper.org

Jonathan
fonte
13

Use o Apache commons beanutils:

static void copyProperties(Object dest, Object orig) -Copie os valores da propriedade do bean de origem para o bean de destino em todos os casos em que os nomes das propriedades sejam os mesmos.

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

Pablojim
fonte
3
yeh, mas as propriedades que estão no bean de origem, mas não no bean de destino, são simplesmente ignoradas. Obrigado de qualquer forma Pablojim :) Eu acho que tem que ir com Dozer uma vez que temos alguns nomes de propriedades diferentes para DO e DTO :(
ravinikam
1
É justo - eu não sabia disso ... A lista de Pascal foi bastante impressionante!
Pablojim
3

Eu sugiro que você tente o JMapper Framework .

É um bean Java para o mapeador Java bean, permite executar a passagem de dados dinamicamente com anotações e / ou XML.

Com o JMapper, você pode:

  • Criar e enriquecer objetos de destino
  • Aplique uma lógica específica ao mapeamento
  • Gerenciar automaticamente o arquivo XML
  • Implemente os relacionamentos 1 para N e N para 1
  • Implementar conversões explícitas
  • Aplicar configurações herdadas
Alessandro
fonte
2

Fico feliz em adicionar o Moo como uma opção, embora claramente eu esteja inclinado a isso: http://geoffreywiseman.github.com/Moo/

É muito fácil de usar para casos simples, razoavelmente capaz para casos mais complexos, embora ainda existam algumas áreas em que posso imaginar aprimorá-lo para ainda mais complexidades.

Geoffrey Wiseman
fonte
2

Você também pode tentar mapear a estrutura com base no Dozer, mas com a declaração de mapeamento do Excel. Eles têm algumas ferramentas e recursos interessantes adicionais. Verifique em http://openl-tablets.sf.net/mapper

Ivan
fonte