Antes de irmos para a criação do projeto, estarei explicando de forma breve o que são as tecnologias Spring Boot, JPA e MySQL.
- Spring Boot: é um framework Java utilizado para simplificar o desenvolvimento de aplicações Spring, permitindo criar aplicações standalone, que podem ser executados com um simples comando, sem a necessidade de configuração complexa.
- JPA: Java Persistence API é uma especificação do Java que define como os objetos Java devem ser mapeados para banco de dados relacionais(ORM).
- MySQL: sistema de gerenciamento de Banco de Dados relacional (RDBMS) de código aberto mundialmente famoso. Ele é amplamente utilizado para armazenar, organizar e gerenciar grandes volumes de dados em aplicações web e empresariais.
Com essas 3 tecnologias, podemos desenvolver aplicações web robustas, escaláveis e de alto desempenho.
Criação do Projeto
Estaremos criando o projeto em uma ferramenta online chamada: Spring Initializr que facilita a criação de projetos Spring Boot.
Quando você entrar na URL, verá uma tela dessa forma:
Estaremos configurando do lado esquerdo algumas coisas, como:
- Tipo do Projeto: Maven
- Língua: Java
- Versão do Spring Boot: 3.3.2
No Project Metadata
você irá por:
- Group: br.com.(ex: br.com.josemarinho)
- Artifact e Name: spring-jpa-mysql
- Description: Projeto utilizando Spring Boot, JPA e MySQL
- Package name: gerado automaticamente com base no Group e Artifact.
- Packaging: Jar
- Java: 17
Ao lado direito terá as dependências do nosso projeto, precisamos adicionar 3, sendo elas:
- Spring Web
- Spring Data JPA
- MySQL Driver
No final ficará assim:
Após a configuração é só apertar no botão Generate, onde irá começar o download de um Zip contendo todos os diretórios/arquivos do projeto. Logo após é só descomprimir e abrir na sua IDE de preferência.
Primeira execução
Assim que você abrir o projeto e tentar executar o programa, irá acusar um erro em tempo de execução dizendo o seguinte:
Description:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class
Isso ocorre porque o Spring Boot não consegue configurar automaticamente um DataSource
para a aplicação. Vamos configurar?
No projeto terá um diretório chamado resources
, dentro desse diretório tem alguns arquivos, dentre eles um arquivo chamado application.properties
que é onde fica as configurações de um projeto spring boot. Eu gosto de utilizar sua versão em YAML/YML
, para isso é só deletar esse arquivo e criar outro chamado application.yml
, ficando dessa forma:
Vamos definir a url em que nosso app irá conectar, driver, username e password:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: username
password: password
url: jdbc:mysql://127.0.0.1:3306/seu_banco_de_dados
No application.properties
ficaria da seguinte forma:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.url=jdbc:mysql://localhost:3306/seu_banco_de_dados
Pronto, agorá é só executar novamente o projeto e você verá uma saída como essa.
Criação de Entidades
Em meu banco de dados tenho uma tabela simples chamada usuarios
no qual existem 2 campos:
-
id
: primary key integer auto increment -
usuario
: varchar(255)
Com ela, iremos dar o primeiro passo para mapear essa tabela em um contexto java, criando uma Entidade
. Para isso crie uma classe chamada Usuario
, no final ela deverá ficar assim:
@Entity
@Table(name = "usuarios")
public class Usuario {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String usuario;
// Getters e Setters
}
-
@Entity
: Marca a classe como uma entidade JPA. Isso indica ao JPA que a classe deve ser persistida em um banco de dados. -
@Table(name = "produto")
: Especifica o nome da tabela no banco de dados à qual a entidade está mapeada. Se essa anotação não for fornecida, o JPA assumirá que o nome da tabela é o mesmo que o nome da classe. -
@Id
: Indica que o campo é a chave primária da entidade. -
@GeneratedValue
: Indica a estratégia que iremos gerar os valores, no caso escolhemos que o próprio banco de dados irá gerar automaticamente para nós, o padrão é oGenerationType.AUTO
.
Agora que temos nossa entidade já desenvolvida precisamos criar nossos Repositórios que implementarão o JPA para realizar manipulações no Banco de Dados.
Criação dos Repositórios utilizando JPA
Para iniciar crie uma interface chamada UsuarioRepositorio
, essa interface vai herdar as características de JpaRepository<>
passando dois valores genéricos, o primeiro é a entidade e o segundo é o tipo do Id. Não podemos deixar de esquecer de anotar a classe com a anotação @Repository
, ficando dessa forma:
@Repository
public interface UsuarioRepositorio extends JpaRepository<Usuario, Integer> { }
O JpaRepository
é uma interface do Spring Data JPA que fornece diversos métodos prontos para realizar operações de acesso a dados em uma aplicação, como por exemplo o findAll()
que retorna todos os dados de uma determinada tabela de banco de dados. No final do artigo estarei deixando alguns links falando mais sobre.
Já temos o suficiente para realizar algumas consultas, vamos criar um ponto de entrada na nossa aplicação para ver esses dados.
Crie uma controller chamada: UsuariosController
.
Nela vamos anotar com 2 anotações: @RestController
e @RequestMapping("/v1/usuarios")
para mapear a rota da nossa controller
Vamos fazer injeção de dependência da UsuarioRepository
e criar um endpoint GET
para obter os dados da controller.
No final ficará assim:
@RestController
@RequestMapping("/v1/usuarios")
public class UsuarioController {
private UsuarioRepositorio usuarioRepositorio;
public UsuarioController(UsuarioRepositorio usuarioRepositorio) {
this.usuarioRepositorio = usuarioRepositorio;
}
@GetMapping()
public ResponseEntity getUsuarios() {
return ResponseEntity.status(HttpStatus.OK).body(usuarioRepositorio.findAll());
}
}
Note que estou utilizando o método findAll()
que mencionei mais acima existente na repository.
Em minha tabela de banco de dados, já possuo alguns dados. Fazendo uma consulta simples, virá o seguinte resultado:
Vimos que temos 3 dados na tabela.
Após salvar o conteúdo da controller e executar novamente o projeto, quando realizarmos uma requisição do tipo GET na url localhost:8080/v1/usuarios
, virá o seguinte resultado:
Vemos que o resultado que foi resgatado ao realizar uma consulta no banco de dados foi exatamente o mesmo ao fazer uma requisição GET em nossa aplicação graças ao JPA e ao Spring Boot.
Chegamos ao final de mais um post. Estarei deixando alguns links de referência:
- Jpa Repository
- Anotação Generated Value
- Driver MySQL JPA
- Spring Boot YAML vs Properties
- Spring Data JPA
O repositório do artigo se encontra nesse link: Repositório Projeto
Um abraço e bons estudos! Até mais.