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

Do Modelo (JPA + QueryDSL) à Visão (JSF) com código limpo

Do Modelo (JPA + QueryDSL) à Visão (JSF) com código limpo

Um caso de uso bastante comum em sistemas que utilizam JSF é a criação de formulários de consulta utilizando vários critérios diferentes (com muitos deles opcionais). Partindo dos dados dos formulários costuma-se criar código inundado de condições (IFs) e com checagem de nulos (!= null) para compor Strings que resultam em consultas JPA. QueryDSL é uma ferramenta útil e produtiva para garantir a geração de Queries JPA 100% type-safe sem a concatenação dessas Strings e com outras facilidades como o auto-complete em IDEs. Nesta palestra demonstraremos como fazer o uso intensivo de tipos customizados, Converters, Null Objects e QueryDSL para produzir uma arquitetura enxuta, produtiva e type-safe no desenvolvimento deste caso de uso partindo do Modelo (JPA + QueryDSL) à visão (JSF).

Código disponível em https://github.com/yanaga/jsf-querydsl-jpa

Edson Yanaga

July 13, 2013
Tweet

More Decks by Edson Yanaga

Other Decks in Technology

Transcript

  1. Do Modelo (JPA + QueryDSL) à Visão (JSF) com código

    limpo Edson Yanaga @edsonyanaga Produtec Informática
  2. Edson Yanaga • Bacharel em Ciência da Computação/UEM • Mestre

    em Engenharia Elétrica/UTFPR • Desenvolvedor Java desde 1997 • Administrador Unix desde 1999 • Líder Técnico na Produtec desde 2012 • Instrutor Líder da GlobalCode desde 2012
  3. Certificações • Oracle Certified Professional, Java Platform, Enterprise Edition 6

    Enterprise JavaBeans Developer • Sun Certified Enterprise Architect for the Java Platform,Enterprise Edition 5 (i) • Certified ScrumMaster • Sun Certified Developer for Java Web Services 5 • Sun Certified Specialist for NetBeans IDE • Sun Certified Web Component Developer for J2EE 1.4 • Sun Certified Programmer for Java 2 Platform 1.4
  4. CriteriaQuery query = builder.createQuery(); Root<Person> men = query.from( Person.class );

    Root<Person> women = query.from( Person.class ); Predicate menRestriction = builder.and( ! builder.equal( men.get( Person_.gender ), Gender.MALE ), ! builder.equal( men.get( Person_.relationshipStatus ), RelationshipStatus.SINGLE )); Predicate womenRestriction = builder.and( ! builder.equal( women.get( Person_.gender ), Gender.FEMALE ), ! builder.equal( women.get( Person_.relationshipStatus ), RelationshipStatus.SINGLE )); query.where( builder.and( menRestriction, womenRestriction ) ); Consulta JPA Criteria
  5. Consulta QueryDSL JPAQuery query = new JPAQuery(em); QPerson men =

    new QPerson("men"); QPerson women = new QPerson("women"); query.from(men, women).where( ! men.gender.eq(Gender.MALE), ! men.relationshipStatus.eq(RelationshipStatus.SINGLE), ! women.gender.eq(Gender.FEMALE), ! women.relationshipStatus.eq(RelationshipStatus.SINGLE));