Conceitos de Hibernate e JPA
Em artigos anteriores, abordamos o conceito de banco de
dados, apenas com intuito de mostrar como funcionam as quatro operações básicas
do banco dados. Neste artigo iremos um pouco mais além, como podemos
implementar as quatro operações do banco de dados utilizando Hibernate e JPA
que são duas ferramentas que são utilizadas para a configuração do banco de
dados em um projeto Java.
JPA (Java Persistence API)
Para início de conversa, iremos começar nossa abordagem baseados
no conceito de JPA (Java Persistece API), que se trata de uma especificação em
Java, que permite que o usuário gerencia a persistência e mapeamento
objeto-relacional. Essa especificação permite que os desenvolvedores utilizem
apenas código em Java sem a necessidade de utilizar códigos em SQL diretamente.
Principais conceitos de JPA
Entity: E uma classe Java que mapeia uma classe Java
no banco dados. Cada tabela que foi criada no banco de dados, deve está mapeada
no código Java como mostra o código abaxo:
@Entity
@Table(name
= "users")
public
class User {
@Id
@GeneratedValue(strategy =
GenerationType.IDENTITY)
private Long id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
}
O código acima mostra uma classe de modelo User utilizando
anotações JPA para o mapeamento da tabela e das colunas do banco através das
anotações @Entity, @Table, @Id, @GeneratedValues, @Column, que são responsáveis
por indicar ao Java o que cada parte da classe significa para o banco de dados:
·
@Entity: Essa anotação indica que a classe deve
ser mapeada para tabela do banco de dados
·
@Table: Especifica o nome da tabela que deve
conter no banco de dados
·
@Id: Identifica a chave primaria da entidade
·
@GeneratedValue: Define como os valores da chave
primaria serão gerados
·
@Column: Mapeia colunas do banco de dados.
Outro conceito importante é o de Persistence Unit, que se
trata de um documento por nome de persistence.xml onde contém todas as
configurações do banco de dados, como usuário, senha, nome da conexão. O código
a seguir mostra uma configuração simples de um projeto.
<persistence
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
version="2.1">
<persistence-unit
name="example-unit">
<class>com.example.User</class>
<properties>
<property
name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/exampledb"/>
<property
name="javax.persistence.jdbc.user" value="root"/>
<property
name="javax.persistence.jdbc.password"
value="password"/>
<property
name="javax.persistence.jdbc.driver"
value="com.mysql.cj.jdbc.Driver"/>
<property
name="hibernate.dialect"
value="org.hibernate.dialect.MySQL5Dialect"/>
</properties>
</persistence-unit>
</persistence>
O código acima mostra como é feito a configuração do banco
de dados no projeto. Vamos a partir destacar algumas tags que são essenciais
para a configuração de um banco de dados:
<property
name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/exampledb"/>
A tag acima configura uma base de dados de acordo com as
pré-configurações do banco de dados: nos temos no final da configuração o
“exempledb” que pode ser alterado com outro nome de acordo com o contexto do
seu projeto.
<property
name="javax.persistence.jdbc.user" value="root"/>
<property
name="javax.persistence.jdbc.password"
value="password"/>
As tags acima mostra a configuração de usuário e senha do
banco de dados. Os parâmetros “root” e “password” podem ser substituídos de
acordo com as sconfigurações do seu banco.
<property
name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
A tag acima estabelece uma relação entre a aplicação Java e
o banco de dados MySQL. Ele é responsável por traduzir as chamadas da API em código
SQL.
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQL5Dialect"/>
A tag acima define o dialeto que o hibernate deve utilizar
para gerar o código SQL. Cada banco de dados tem o seu dialeto, logo essa
propriedade tem finalidade de informar ao framework como ele deve se comportar
em relações as operações de banco de dados.
Após serem concluídas as configurações, podemos utilizar uma
linguagem de consulta que permite manipular dados utilizando esse framework. Trata-se
do JPQL (Java Persistence Query Language) uma linguagem de consulta de banco de
dados apropriada para aplicações que utilizam Hibernate e JPA com persistência de
dados. Ela permite que o desenvolvedor realize operações no banco de dados através
de comandos muito similares ao SQL, porém adaptado para a linguagem Java. A seguir
será mostrado como é utilizada essa linguagem para as quatro operações básicas do
SQL.
Como são feitas as operações em
JPQL?
No CREATE, não há uma query
especifica realizar o cadastro de um registro no banco. Porém para realização
de consultas atualizações e exclusão de registro no banco existem comandos muito
parecidos com SQL que são utilizados para realizar essas operações:
Para realizar uma consulta
utilizando JPQL podemos utilizar a seguinte sintaxe:
String jpql = "SELECT u FROM User u
WHERE u.username = :username";
A sintaxe acima realiza uma consulta na entidade User utilizando
username como chave para consulta. O parâmetro username pode ser trocado por
outro parâmetro que o usuário deseja para realizar a consulta.
Para atualizar um registro no banco de dados pode-se
utilizar a seguinte sintaxe:
String jpql = "UPDATE User u SET
u.password = :newPassword WHERE u.username = :username";
A sintaxe acima mostra como é realizada a atualização de um
registro através do comando UPDATE. Para realizar a atualização de registro deve
utilizar a cláusula WHERE pois sem ela o seu registro é alterado em todos os atributos.
String jpql = "DELETE FROM User u WHERE
u.username = :username";
A sintaxe acima mostra como se apaga um registro através do
comando DELETE. Para realizar a exclusão de um registro especifico o usuário deve-se
usar a cláusula WHERE passando como parâmetro uma chave especifica que indica qual
registro será apagado.
Neste artigo tratamos sobre as ferramentas que são utilizadas
para manipular e persistir os dados no banco utilizando Hibernate e JPA.
Comments
Post a Comment