O intuito desse projeto é mostrar a criação e funcionamento de uma API REST completa. Ou seja, o aluno terá capacidade de executar a aplicação, gravar dados, apagar dados e alterar dados no banco de dado usando a interface REST provida por esta API.
Dado o tempo de curso, nem todas as boas práticas ou conceitos possíveis para uma API REST foram seguidos ou utilizados. Como sinalizado abaixo, foram usados algumas soluções diferentes para resolver os mesmos problemas de forma a ilustrar alumas das possíveis soluções providas pelo Spring Boot.
O projeto espera que esteja configurado um banco de dados MySQL sendo executado na máquina local (localhost:3306
) e com um banco de dados chamado projetocrm
e usuário root
(sem senha) conforme especificado no arquivo application.properties
do projeto.
Na pasta resources/data
do projeto, existe o arquivo cria_bd.sql
que é o script para criar a estrutura necessária no BD para uso com o projeto.
Para o curso e o projeto, a versão mínima da JDK é a Java 8
Observações sobre o projeto aqui exemplificado:
- Classe
ClienteController
: foram usados os 4 métodos mais conhecidos:GET
para a leitura dos dados doCliente
DELETE
para a exclusão física do registro do banco de dadosPUT
para a alteração dos dados do cliente - vale observar que todo o objetoCliente
deve ser enviado para que não acorram erros (simplificação por questões do tempo de curso)POST
para a criação de um novo cliente - vale a observação do item acima
- A classe
Cliente
representa um cliente do CRM com 6 campos. Cada campo possui um tipo diferente para ilustrar a forma como o REST faz a conversão automática e como o aluno deve pensar na hora de fazer o uso dos métodos adequados nosPreparedStatement
eResultSet
:nome
(tipo:String
)endereco
(tipo:String
)telefone
(tipo:String
)salario
(tipo:double
)nr_filhos
(tipo:int
)data_cadastro
(tipo:Date
)
- A classe
ClienteService
existe para representar a camada de serviços da aplicação. É importante frisar esse ponto para que os alunos já comecem a ter o conhecimento de Separation of Concerns, organização do código e lógica de negócios. Ainda nesse tema, existe umaException
customizada (ClienteNaoEncontradoException
) criada para tratamento de erro de cliente não encontrado no banco de dados. Serve para ilustrar o tratamento de exceções na camada de serviços. Aqui também é utilizado o modo de Depency Injection@Autowired
. Fazer a comparação com o modo de DI via construtor. - A classe
ClienteRepository
possui alguns tratamentos diferenciados na forma de lidar com os parâmetros de entrada. Também serve para ilustrar as diferentes formas de tratamento que são possíveis pelo Spring Boot:- Nos métodos
leClientePorId
eapagaClientePorId
é usado a forma não convencional de pegar uma conexão com o banco de dados.connection = jdbcTemplate.getDataSource().getConnection();
- Comparar com o método utilizado durante o curso no Módulo 5. Ilustra o uso puro doPreparedStatement
eResultSet
. - Nos métodos
alteraClientePorId
eescreveCliente
é usada a forma Spring Boot de passagem de parâmetros nomeadosNamedParameterJdbcTemplate
. Serve para mostrar como isso dá legibilidade ao código e como o código fica mais enxuto.
- Nos métodos
{
"id": 1,
"nome": "<nome do cliente>",
"endereco": "<endereco do cliente>",
"telefone": "<telefone do cliente>",
"salario": 12345.00,
"nrFilhos": 1,
"dataCadastro": "2022-11-02"
}
O campo <id>
só deve ser informado para o método PUT
.