DEV Community

Cover image for Como iniciar um aplicativo Spring Boot + JPA + MySQL
José Paulo Marinho
José Paulo Marinho

Posted on

2

Como iniciar um aplicativo Spring Boot + JPA + MySQL

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:

Imagem da interface principal do Spring Initializer

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:

Imagem com o projeto configurado no Spring Initializer

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
Enter fullscreen mode Exit fullscreen mode

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:

Diretório resources Imagem

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Pronto, agorá é só executar novamente o projeto e você verá uma saída como essa.

Imagem de saída do terminal após executar o programa com sucesso

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)

Imagem da modelagem da tabela de usuários

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
}
Enter fullscreen mode Exit fullscreen mode
  • @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 é o GenerationType.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> { }
Enter fullscreen mode Exit fullscreen mode

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());
    }
}
Enter fullscreen mode Exit fullscreen mode

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:

Select banco de dados MySQL na tabela usuarios utilizando o Dbeaver

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:

Requisição GET /v1/usuarios resultado postman

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:

O repositório do artigo se encontra nesse link: Repositório Projeto

Um abraço e bons estudos! Até mais.

Do your career a big favor. Join DEV. (The website you're on right now)

It takes one minute, it's free, and is worth it for your career.

Get started

Community matters

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay