Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Simplificando persistência de Dados com Apache DeltaSpike Data

Simplificando persistência de Dados com Apache DeltaSpike Data

Apache DeltaSpike é uma coleção de extensões CDI portáveis que fornecem recursos úteis para desenvolvedores Java .

DeltaSpike consiste de um módulo CORE e vários módulos OPCIONAIS provendo funcionalidades adicionais para nossas aplicações.

Nesta palestra veremos o módulo Data que é o mais conhecido e muito útil, passou a ser o meu preferido como uma alternativa ao "Spring Data" para Jakarta EE .

https://deltaspike.apache.org/

Daniel Dias

May 07, 2019
Tweet

More Decks by Daniel Dias

Other Decks in Programming

Transcript

  1. 4 / 26 • Uma coleção de extensões CDI portáveis

    que fornecem recursos úteis para desenvolvedores Java.
  2. 5 / 26 • Uma coleção de extensões CDI portáveis

    que fornecem recursos úteis para desenvolvedores Java. • Consiste de um módulo CORE e vários módulos OPCIONAIS provendo funcionalidades adicionais para nossas aplicações.
  3. 6 / 26 • Uma coleção de extensões CDI portáveis

    que fornecem recursos úteis para desenvolvedores Java. • Consiste de um módulo CORE e vários módulos OPCIONAIS provendo funcionalidades adicionais para nossas aplicações. • incluem recursos para segurança aprimorada com controle de tipo seguro sobre invocações de método, integração com agendamentos, injeção de objetos CDI em validadores, um contexto e escopo transacional e muito mais.
  4. 7 / 26 • Uma coleção de extensões CDI portáveis

    que fornecem recursos úteis para desenvolvedores Java. • Consiste de um módulo CORE e vários módulos OPCIONAIS provendo funcionalidades adicionais para nossas aplicações. • incluem recursos para segurança aprimorada com controle de tipo seguro sobre invocações de método, integração com agendamentos, injeção de objetos CDI em validadores, um contexto e escopo transacional e muito mais. • Como uma extensão CDI, o DeltaSpike deve ser usado em conjunto com uma implementação de CDI e suporta tanto o JBoss Weld quanto o Apache OpenWebBeans. Testado em uma variedade de servidores de aplicativos e contêineres habilitados para CDI, incluindo o TomEE, WildFly, GlassFish e Jetty .
  5. 13 / 26 • Módulo de dados é uma implementação

    do padrão de repositório . • Só suporta RDBMS através de JPA . • Mas poderia ser estendido para suportar outros serviços de dados . • Ele usa o módulo de “parcial bean” para criar dinamicamente a implementação no tempo de execução . • Os padrões de repositório são ideais para consultas simples que exigem código clichê, permitindo a centralização da lógica de consulta e, consequentemente, reduzindo a duplicação de código e melhorando a testabilidade.
  6. 18 / 26 @Repository public abstract class EventRepository extends AbstractEntityRepository<

    > { public List<Event> findBySpeaker { return typedQuery("select e from Event e where e.speaker = ?1") .setParameter(1, speaker).getResultList(); } }
  7. 20 / 26 @Repository public abstract class EventRepository extends AbstractFullEntityRepository<

    > { public List<Event> findBySpeaker { return criteria() .like(Event_.speaker, "%" + speaker + "%") .getResultList(); } }
  8. 22 / 26 @Repository public interface EventRepository extends EntityRepository< >{

    Optional<Event> findBySpeaker(String speaker); } • O método de consulta deve retornar uma entidade, uma Opcional de uma entidade, uma lista de entidades ou um fluxo de entidades. • Ele deve começar com o prefixo findBy (ou relacionado findOptionalBy, findAnyBy, findAll, findFirst ou findTop). • Você pode adicionar mais blocos de propriedade-comparador que precisam ser concatenados por um operador booleano. Isso é um AND ou OR. • Podemos usar o mesmo método para excluir uma entidade: * Deve começar com a palavra-chave removeBy (ou deleteBy relacionado). • também é possível classificar consultas usando a palavra-chave OrderBy, seguida do nome do atributo e da direção (Asc ou Desc) : List<Person> findByLastNameLikeOrderByAgeAscLastNameDesc(String lastName);
  9. 23 / 26 @Repository public interface EventRepository extends EntityRepository< >{

    @Query(“select e Event e where e.speaker = ?1”) Event findBySpeaker(String speaker); } • é possível usar consulta SQL nativa, bastando adicionar o argumento : isNative = true . • suporte a @NamedQueries . • suporte a consulta em tempo de execução usando QueryResult : @Query("select p from Person p where p.age between ?1 and ?2") QueryResult<Person> findAllByAge(int minAge, int maxAge); List<Person> result = personRepository.findAllByAge(18, 65) .orderAsc("p.lastName", false) .orderDesc("p.age", false) .lockMode(LockModeType.WRITE) .hint("org.hibernate.timeout", Integer.valueOf(10)) .getResultList();