GeDA – Generic DTO Assembler
Tirando um pouco a poeira e as teias de aranha do blog, apresento-lhes o GeDA. Essa é uma biblioteca utilitária para copiar valores entre Java Beans. Sua aplicação prática é popular DTO’s a partir de Entidades JPA e vice-versa. Antes de conhecer essa biblioteca eu copiava manualmente os dados ou utilizava o BeanUtils com os métodos copyProperties.
A vantagem do GeDA é a facilidade na configuração. Basta adicionar o JAR no seu projeto e montar os DTO’s a partir das entidades. Depois disso, basta adicionar as anotações no DTO e depois criar uma classe para realizar o Assembly entre a Entidade e o DTO. Calma, vou explicar mais detalhadamente logo abaixo.
Configuração
O primeiro passo é fazer o download da biblioteca no site oficial ou diretamente do source forge. Por fim, basta adicionar o jar ao build path do projeto.
Criando um DTO
Apenas para exemplificar, vou criar uma Entidade Usuario:
@Entity @Table(name="usuario") public class Usuario { @Id private Long id; private String nome; private String login; private String senha; // Get's e Set's }
E agora vou mapear esta entidade em um DTO usando as anotações do GeDA:
@Dto public class UsuarioTO { @DtoField("id") private Long idUsuario; @DtoField private String nome; @DtoField private String login; @DtoField private String senha; // Get's e Set's }
Importante destacar aqui, o uso da anotação @DtoField. No Id, eu precisei definir o nome original do campo, pois modifiquei-o no meu DTO. Como os outros campos possuem o mesmo nome, não há necessidade de informar o nome do campo na entidade.
Copiando as informações
Agora vamos criar a classe que realizará o assembly:
public class UsuarioService { public UsuarioDTO getUsuario(final Long idUsuario) { final Usuario usuario = getFromDb(idUsuario); final UsuarioDTO dto = novoTO(); final DTOAssembler assembler = DTOAssembler.newAssembler(UsuarioDTO.class, Usuario.class); assembler.assembleDto(dto, usuario, null); return dto; } public UsuarioDTO novoTO() { return new UsuarioDTO(); } public Usuario getFromDb(final Long idUsuario) { // aqui teria um código para buscar um usuário do banco } }
É um exemplo simples e rápido, mas o suficiente para mostrar como é simples realizar o assembly entre uma entidade e um DTO. É possível fazer as duas conversões, no método do Service, bastaria mudar a chamada do método assembleDto para assembleEntity.
Concluindo
Existem outras coisas possíveis, como copiar objetos, listas, etc. Para isso, sugiro uma visita ao faq no site oficial, onde é possível visualizar alguns exemplos de conversões. Apesar da documentação ser bastante fraca, é possível se basear nos exemplos para suprir praticamente todas as necessidades.
Uma última dica, para quem deseja utilizar o GeDA em aplicações reais, sugiro a criação de um Assembler genérico, o que facilitará bastante o processo de copia dos valores.
JavaTags: assemlby, dto, entity, geda