Entendendo e iniciando com Hibernate
Tags: java, hibernate, programming, community
Published: 2022-07-18 02:54:26

### Tabela de Conteúdos:
**[Introdução](#introdução)**
**[Algumas informações referentes ao Hibernate](#algumas-informações-referentes-ao-hibernate)**
**[O que é Hibernate](#o-que-é-o-hibernate)**
**[Introdução ao Hibernate](#introdução-ao-hibernate)**
**[Prós da utilização do Hibernate](#prós-da-utilização-do-hibernate)**
**[Configuração](#configuração)**

## Introdução

Este post é uma explicação e exemplificação resumida sobre Hibernate e JPA. Ao final do artigo estão algumas referências, vídeos e repositórios caso você queira se aprofundar ainda mais no assunto. Sou o Jonathas, e desde ja lhe desejo bons estudos!

## Informações referentes ao Hibernate

Licença: GNU Lesser General Public License (Open-source)
Surgimento: 23 de Maio de 2001
Desenvolvedora: Red Hat

Repositórios:
[https://github.com/hibernate](https://github.com/hibernate)

## Sobre o Hibernate

O Hibernate é uma framework de ORM para a linguagem de programação Java. ORM significa Object Relational Mapper, ou mapeador de objeto relacional. O Hibernate é uma ferramenta muito utilizada nos dias de hoje, sendo, a mais conhecida entre os frameworks de ORM para Java. 

O Hibernate tem o propósito de unir a orientação a objetos e bancos relacionais de uma maneira muito mais simples e descomplicada.

O framework Hibernate é o mais conhecido, dentre os frameworks ORM para a linguagem Java.

## Prós da utilização do Hibernate

- Economia de esforço e preocupação
- Gerar o código SQL para qualquer banco de dados relacional
- Gera o código SQL a partir de anotações, sem gerar dor de cabeça aos desenvolvedores
- Confiabilidade. O Hibernate está a muito tempo no mercado, utilizado por grandes empresas e com uma comunidade ativa
- Podemos trocar o banco de dados utilizado sem ter que alterar o código-fonte
- Alta performance
- Manutenabilidade 
- Escalabilidade
- Produtividade
- Provedor JPA
- Open Source

## JPA

Java Persistence API (ou simplesmente JPA) é uma API padrão da linguagem Java que descreve uma interface comum para frameworks de persistência de dados. A JPA define um meio de mapeamento objeto-relacional para objetos Java simples e comuns, denominados beans de entidade.

A JPA, funciona através de qualquer framework ORM (Mapeamento Objeto Relacional) baseado na especificação JPA. Pode ser o framework Hibernate, EclipseLink, TopLink, OpenJpa, etc. 

JPA é muito utilizado para conexão e acesso a banco de dados relacionais. 

![Diagrama referente ao JPA](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ny7oq8upl63ap3flbxgc.png)

A ORM é a implementação da interface JPA. No nosso caso a ORM que utilizamos aqui neste artigo é o Hibernate.

## Anotações no Hibernate (annotations)

Utilizamos anotações, para mapear modelos de base de dados. Possibilitando assim gerar alterações referentes as bases de dados, através das anotações.

As anotações são claras e intuitivas. Entre as anotações mais importantes temos o Entity, Table, Id e Column.

- O _@Entity_, é utilizado para declarar uma entidade.
- O _@Table_, é utilizado para declarar uma tabela no banco de dados.
- O _@Id_, é usado para declararmos o atributo id da nossa tabela.
- O _@Column_, declaramos os atributos/colunas de uma tabela.

## Prática (exemplo)

#### ``Tecnologias e Ferramentas``

- MySql Community
- Java JDK
- Intellij Community Edition 2022.1
- SGBD de sua preferência (DbVisualizer, Workbench, DBeaver, etc)
- Spring Boot (Maven Dependencies)
  - Spring Web (Web)
  - Spring Data JPA (SQL)
    - Spring Data
    - Hibernate
  - MySQL Driver (SQL)

### ``Passo 01: Criação do projeto``

Vamos acessar a página oficial do Spring Initializr, através do link: [https://start.spring.io/](https://start.spring.io/).

![Passo 01 - Spring Initializr](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hn8z5rjlomsdac85txm7.png)

1. Em seguida Selecionamos o tipo do projeto Maven na parte 
'Project'
2. Selecionamos Java, na parte 'Language'.
3. Selecionamos uma versão estável na parte 'Spring Boot', sendo a atual 2.7.1
4. Nomeamos o grupo, nome do projeto e afins
5. Selecionamos a versão do Java que estamos utilizando;
6. Selecionamos a dependencia Spring Data JPA (SQL)
7. Selecionamos a dependencia MySQL Driver (SQL)
8. Clicamos em 'Generate' e o projeto passa a ser baixado

### ``Passo 02: Abrindo o projeto no Intellij``

Vamos extrair o a pasta do projeto. Pode ser utilizado o WinRar, 7Zip, ou até mesmo alguma ferramenta nativa do sistema operacional que você estiver utilizando.

![Abrindo projeto no Intellij](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/47se6cszxd2sbjzbs3al.png) 

Em seguida abra seu projeto no Intellij, ou outra ferramenta de sua preferência como Eclipse, VSCode ou NetBeans.

![Selecionando nosso projeto](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g0v1str3usmaz579mpia.png)
 
![Importanto o Maven](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dpw873sclis4oxanu65e.png)

New > Module from Existing Sources... > Selecionamos nosso projeto > Selecionamos "import..." Maven > Clícamos em 'create'

### ``Passo 03: Criando um banco de dados e testando conexão``

No meu caso, estarei utilizando o banco de dados MySQL Community e o SGBD Workbench.

![Criando uma nova conexão](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rfzot91p4zhsufrkdxsm.png)

Configure uma nova conexão no banco de dados, ou utilize uma existente. Teste a conexão do mesmo.

![Criando um novo banco de dados](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t0fi3igoutk115y28j3z.png)

Crie um novo banco de dados com um nome de sua preferência e pronto!

### ``Passo 04: Configurando o application.properties no projeto``

No arquivo _application.properties_. Encontrando em _'src > main > resources'_. Adicione o seguinte trecho de código:

```
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/tutorial
spring.datasource.username=root
spring.datasource.password=admin
```

Referencie seus dados conforme cada propriedade da configuração do seu banco de dados (porta, nome do banco, username, password (senha)).

### ``Passo 05: Estruturando o projeto``

### ``Passo 06: Criando 'Entities' e 'Repositories'``

### ``Passo 07: Testes - CRUD``

<br>
## Referências:

[Algaworks- Alexandre Afonso - Tutorial definitivo: JPA](https://blog.algaworks.com/tutorial-jpa/)
[Tidicas - JPA](https://www.tidicas.com.br/?p=1864)
[Wikipedia - JPA (Java Persistence API)](https://pt.wikipedia.org/wiki/Java_Persistence_API)
[DevMedia - JDBC](https://www.devmedia.com.br/aprendendo-java-com-jdbc/29116)
[DevMedia - Introdução ao Hibernate 3.5](https://www.devmedia.com.br/introducao-ao-hibernate-3-5/29110)
[Medium - Eduardo Ribeiro - Hibernate com Java 11](https://medium.com/@eduardoribeirocury/hibernate-com-java-11-3be9fe3718c9)
[Youtube - Expertos Tech- COMO CRIAR UMA API REST EM JAVA E SPRING BOOT PASSO A PASSO](https://youtu.be/0HKAqjiZveE)