Classe Controller ->
* É a classe que a gente faz a comunicação com quem chama nossa aplicação (ex: front)
* E a classe que criamos ENDPOINTS (pontos que tem as rotas mapeadas para acesso do front)
* Recebe a anotação @Controller que indica para o Spring que se trata de um controller
* @ResponseBody -> Indica que seu endpoint (metodo com rota), tem um retorno para fora do Java (para o front)
* @RequestMapping -> Que indica a rota para acessar a classe (localhost:8080/rotaDaClasse/rotaDoEndpoint)
* @GetMapping (ou PostMapping, ou PutMapping ou DeleteMapping) -> Mapeia a rota do endpoint e define o metodo REST como GET, POST PUT ou DELETE
Classe Service ->
* @Service para indicar para spring que se trata de uma service
* É a classe responsável por ter nossa regra de negócio
* É aqui que nosso código principal fica, ela quem converte objetos, chama o banco de dados, chama o que o codigo precisar
Interface Repository ->
* É a interface que comunica com o banco de dados
* @Repository para falar para spring que se trata de um repository
* Para nao precisarmos criar o codigo que vai no banco de dados, extendemos a JpaRepository, passando a entity e o tipo de dado da primary key, assim o spring cria para gente o codigo de ir no banco de dados
Entity ->
* É um objeto para comunicar com o banco de dados, ele representa uma tabela do seu banco
* @Entity para falar para o spring que se trata de uma entity
* @Table para falar para o spring, qual tabela se refere
* @Id para falar para o spring, qual campo dessa tabela, é a primary key do banco de dados
* @GeneratedValuye para falar para o spring se a primary key, e auto gerado (Ex: id 1, 2, 3, 4 ,5)
* @Column para falar para o spring, qual a coluna do banco de dados, a variavel representa (so usamos caso os nomes nao seja correspondentes)
DTO ->
* É um objeto simples
* É utilizado para comunicar com o front-end e trafegado entre a classe controler e service
Funcionamento do salvar->
1 - Classe Contrler recebe a requisicao do front-ent (DTO marcado com @RequestBody)
2 - Controller chama a Service passando o DTO(@Autowired para injetar a service dentro da controller)
3 - Service recebe a requisição do controller e converte o DTO em ENTITY
4 - Service chama a repository, passando a entity (@Autowired para injetar o repository na service)
5 - Repository chama o banco de dados e salva (Spring que cria o codigo atraves das anotacoes)
6 - Service recebe o objeto salvo (entity), converte para DTO
7 - Service retorna o DTO para controller
8 - Controller retorna o DTO para o front
Funcionamento do buscar->
1 - Controller recebe a requisicao do front-end e o ID do item buscado (@RequestParam)
2 - Controller chama a Service passando o ID (@Autowired para injetar a service dentro da controller)
3 - Service recebe a requisição do controller e busca na repository o findById
4 - Service recebe o retorno da repository (entity) e converte para DTO
5 - Service retorna para Controller o DTO
6 - Controller retorna para front o DTO (@ReponseBody)