Baixe o app para aproveitar ainda mais
Prévia do material em texto
TÉCNICAS DE PROGRAMAÇÃO Neusa Liberato Evangelista REST Aplicação Exemplo - evoluindo e aplicando Abstract Factory SERVIÇO REST COM SPRING Próximos passos Incluir opção de banco em memória H2 (utilizar quando não tivermos Docker). Métodos para inserir os tipos de atendimento padrão no banco em memória. Criar método no repositório para consulta nativa. Criar as classes de mapeamento das demais tabelas. Criar as interfaces Repository das demais tabelas. Criar os BCs e Controllers necessários. #H2 - in memory spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.jpa.database-platform=org.hibernate.dialect.H2Dialect # Console H2 (opcional) spring.h2.console.enabled=true spring.h2.console.path=/h2-console SERVIÇO REST COM SPRING Application.properties <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> SERVIÇO REST COM SPRING pom.xml public List<TipoAtendimento> inserirTiposPadrao() { if (CollectionUtils.isEmpty(this.obterTodos())) { Long id[] = {1L,2L,3L,4L,5L}; String nome[] = {"Respiratório","Traumatológico", "Ginecológico", "Obstrético","Clínico Geral"}; for (int i=0; i<id.length;i++) { TipoAtendimento tipo = new TipoAtendimento(id[i], nome[i]); this.repository.save(tipo); } } return this.obterTodos(); } SERVIÇO REST COM SPRING Método no BC para inserir tipos de atendimento @Query(value = "SELECT * FROM tipo_atendimento WHERE nome_tipo_atendimento like :criterio", nativeQuery = true) List<TipoAtendimento> obterPorParteNome(@Param("criterio") String criterio); SERVIÇO REST COM SPRING Método no Repository consulta nativa public List<TipoAtendimento> obterPorNome(String nomeOuParte) { String nomeOuParteLike= "%" + nomeOuParte + "%"; List<TipoAtendimento> lista= repository.obterPorParteNome(nomeOuParteLike); return lista; } Método no BC para chamar consulta nativa @PostMapping("/inserirTipos") @ResponseBody public ResponseEntity<List<TipoAtendimento>> inserirTipos() { return ResponseEntity.ok(bc.inserirTiposPadrao()); } @GetMapping("/consultarPorNome/{nomeOuParte}") public ResponseEntity<List<TipoAtendimento>> obterTodos(@PathVariable String nomeOuParte) { return ResponseEntity.ok(bc.obterPorNome(nomeOuParte)); } SERVIÇO REST COM SPRING Controller SERVIÇO REST COM SPRING Mapeamento das tabelas: TipoDocumento, Pessoa e Atendimento Modelo sugerido SERVIÇO REST COM SPRING Tipo Documento ORM: classe @Entity TipoDocumento Repository: classe TipoDocumentoRepository extends JpaRepository<TipoDocumento, Long> Business: classe TipoDocumentoBC Controller: classe TipoDocumentoController SERVIÇO REST COM SPRING Pessoa ORM: classe @Entity Pessoa Repository: classe PessoaRepository extends JpaRepository<Pessoa, Long> Business: classe PessoaBC Controller: classe PessoaController SERVIÇO REST COM SPRING Atendimento ORM: classe @Entity Atendimento Repository: classe AtendimentoRepository extends JpaRepository<Atendimento, Long> APLICANDO PADRÃO ABSTRACT FACTORY APLICANDO PADRÃO SINGLETON O padrão AbstractFactory não garante que teremos apenas uma instância de cada fábrica e de cada produto, então vamos aplicar o padrão Singleton para isso. public class CpfFactory implements IdentificacaoFactory { private static CpfFactory INSTANCE = new CpfFactory(); private CpfFactory() { } public static CpfFactory getInstance() { return INSTANCE; } ... OBRIGADA Neusa Liberato Evangelista
Compartilhar