Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

22/08/2023, 11:14 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos.
https://online.unip.br/imprimir/imprimirconteudo 1/8
Este módulo aborda a conexão e instruções de acesso a banco de dados através do
framework Hibernate.
O framework Hibernate é um mecanismo de fácil aplicação que permite a persistência de
objetos em banco de dados relacionais de maneira transparente. Desta forma, não se faz
necessário a construção de comandos SQL, evitando a inclusão destas instruções em seu
código, bem como, preocupar-se com o mapeamento do resultado de suas consultas para
objetos.
O mapeamento de forma manual exige que o desenvolvedor se preocupe com questões
como verificar se um atributo é nulo, se o seu valor foi alterado, construir cada um dos
comandos SQL para inserir, atualizar ou apagar uma linha na tabela, conhecer as
peculiaridades de cada banco de dados (Oracle, MySQL, SQL Server, e outros), como por
exemplo, o formato de datas ou com o mecanismo de geração de valores para chaves
primárias, e ainda, estabelecer uma conexão JDBC com o banco de dados, para só então
poder submeter os comandos SQL gerados.
No caso de recuperação dos dados do banco de dados para a aplicação, é preciso fazer o
caminho inverso, ou seja, manipular os dados retornados, criar o objeto para o qual se deseja
atribuir tais valores, e atribuir o valor de cada coluna do banco de dados para o
correspondente atributo.
Para apresentar a aplicação dos conceitos é apresentada uma aplicação que permite a
criação de objetos da classe Pessoa, e a sua persistência em uma tabela já existente no
banco de dados, com o nome pessoas.
Para configurar o mapeamento dos atributos da classe para a tabela do banco de dados, é
utilizado um recurso do Java chamado annotations (Anotações). São elas que indicam para o
Hibernate como manipular os dados.
Abaixo demonstra-se a classe Pessoa já devidamente anotada, com as configurações
necessárias para que os objetos criados a partir desta sejam persistidos no banco de dados:
 
@Entity
@Table(name="pessoas")
public class Pessoa {
 @Id
// @GeneratedValue(strategy=GenerationType.IDENTITY)
// @GeneratedValue(strategy = GenerationType.SEQUENCE)
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Long id;
 
22/08/2023, 11:14 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos.
https://online.unip.br/imprimir/imprimirconteudo 2/8
 @Column(length=100,nullable=false)
 private String nome;
 @Column(nullable=false)
 private String cpf;
 private String rg;
 @Temporal(TemporalType.DATE)
 private Date dataNascimento;
 
A anotação @Entity indica para o Hibernate que a classe Pessoa deve ser armazenada em
uma tabela, e a @Table(name="pessoas") configura o nome da tabela como pessoas. Com a
anotação @Id configura um atributo como sendo a chave primária da tabela.
Para a definição de como a chave primária será controlada pelo sistema, utiliza-se a anotação
@GeneratedValue(strategy=GenerationType.AUTO), que faz com que os valores sejam
gerados automaticamente pelo mecanismo do próprio banco de dados.
Para esta anotação é possível utilizar também as opções GenerationType.IDENTITY e
GenerationType.SEQUENCE, mas com isso, perde-se uma das vantagens na utilização do
Hibernate, que é a portabilidade.
Para cada atributo, é possível definir o nome da coluna, além de outras informações como
obrigatoriedade de preenchimento e seu tamanho, e para isso, utiliza-se a anotação
@Column.
Para o desenvolvimento do exemplo, o banco de dados escolhido foi o MySQL, um banco de
dados livre, grátis e simples de instalar e usar. O acesso ao banco de dados no Java se dá
através de uma conexão JDBC, e para isso, é necessário efetuar o download do driver do
banco ao qual se pretende conectar.
O driver JDBC do MySQL pode ser baixado através do endereço
http://linorg.usp.br/mysqlDownloads/Connector-J/mysql-connector-java-5.1.13.zip.
Do arquivo baixado, é necessário extrair o arquivo mysql-connector-java-5.1.13-bin.jar, que
deve ser adicionado ao classpath da aplicação.
Para configurar a conexão com o banco de dados, o Hibernate precisa saber como se
conectar a ele, e isso é feito através de um arquivo chamado persistence.xml, que deve ficar
dentro de uma pasta nomeada como META-INF, localizada na raiz do projeto. Este arquivo
contém as definições de banco de dados:
 
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
 xmlns="http://java.sun.com/xml/ns/persistence"
22/08/2023, 11:14 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos.
https://online.unip.br/imprimir/imprimirconteudo 3/8
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" >
 <persistence-unit name="artigo">
 <properties>
 <property name="javax.persistence.jdbc.driver"
value="com.mysql.jdbc.Driver" />
 <property name="javax.persistence.jdbc.user" value="root"
/>
 <property name="javax.persistence.jdbc.password"
value="admin" />
 <property name="javax.persistence.jdbc.url"
value="jdbc:mysql://localhost:3306/artigo" />
 <property name="hibernate.dialect"
value="org.hibernate.dialect.MySQLDialect" />
 <property name="hibernate.max_fetch_depth" value="3" />
 <property name="hibernate.hbm2ddl.auto" value="create-drop"
/>
 <property name="hibernate.show_sql" value="true" />
 </properties>
 </persistence-unit>
 </persistence>
 
Os itens de maior atenção deste arquivo são:
· <persistence-unit name="artigo"> - Configura o nome do contexto que será utilizado
pela aplicação e as propriedades abaixo definem as configurações de acesso ao banco de
dados.
· javax.persistence.jdbc.driver – Nome completo da classe do driver JDBC do banco de
dados.
· javax.persistence.jdbc.user – Nome do usuário que será utilizado para estabelecer a
conexão com o banco de dados.
· javax.persistence.jdbc.password – Senha do usuário.
· javax.persistence.jdbc.url – String de conexão com o banco de dados.
22/08/2023, 11:14 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos.
https://online.unip.br/imprimir/imprimirconteudo 4/8
· hibernate.dialect – Configura o dialeto que o Hibernate utilizará para a montagem dos
comandos SQL.
 
O arquivo persistence.xml foi configurado utilizando-se parâmetros que permitem a conexão
com o MySQL, e conforme afirmado antes, uma das vantagens em se utilizar o Hibernate é
permitir a troca do banco de dados da aplicação de maneira praticamente transparente,
bastando para isso alterar os parâmetros de conexão, sem que seja necessário alterar uma
só linha de código fonte do sistema de informação sendo desenvolvido, deste modo, a figura
abaixo demonstra a utilização do banco de dados Oracle.
 
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
 xmlns="http://java.sun.com/xml/ns/persistence"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" >
 <persistence-unit name="artigo">
 <properties>
 <property name="javax.persistence.jdbc.driver"
value="oracle.jdbc.OracleDriver" />
 <property name="javax.persistence.jdbc.user" value="hr" />
 <property name="javax.persistence.jdbc.password" value="hr"
/>
 <property name="javax.persistence.jdbc.url"
value="jdbc:oracle:thin:@127.0.0.1:1521:XE"/>
 <property name="hibernate.dialect"
value="org.hibernate.dialect.Oracle10gDialect" />
 <property name="hibernate.max_fetch_depth" value="3" />
 <property name="hibernate.hbm2ddl.auto" value="create-drop"
/>
 <property name="hibernate.show_sql" value="true" />
 </properties>
 </persistence-unit>
 </persistence>
22/08/2023, 11:14 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos.
https://online.unip.br/imprimir/imprimirconteudo 5/8
 
As mudanças se resumem à:
· O driver JDBC, conteudo da linha value localizado na primeira property.
· A string de conexão com o banco de dados, conteudo da linha value localizado na
quarta property.
· O dialeto utilizado pelo Hibernate na montagem dos comando SQL, conteudo da linha
value localizado na última property.
· E por fim, o usuário e senha utilizado pra acessar a o banco de dados.
 
Deve-se adicionar ao classpath da aplicação, o arquivo ojdbc14.jar referente ao driver JDBC
do Oracle que pode ser baixado através do endereço
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201-088211.html.
Com a aplicação configurada através do arquivo persistence.xml, é necessário obter uma
conexão com o banco de dados para permitir que a aplicação se comunique com o banco de
dados, e para isso, é utilizado um objeto do tipo EntityManager.
A classe EntityManager é disponibilizada pelo Hibernate, e é a classe responsável pela
manipulação dos objetos que devem ser salvos e recuperados do banco de dados.
Para facilitar a criação de objetos EntityManager, foi construída a classe
EntityManagerProvider, que encapsula todo o trabalho necessário para a criação de tais
objetos, classe esta demonstrada abaixo:
 
public class EntityManagerProvider {
 private static EntityManagerFactory emf = null;
 private EntityManagerProvider() {
 }
 public static EntityManager getEntityManagerInstance() {
 if (emf == null) {
 emf = Persistence.createEntityManagerFactory("artigo");
 }
 return emf.createEntityManager();
 }
}
 
22/08/2023, 11:14 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos.
https://online.unip.br/imprimir/imprimirconteudo 6/8
O ponto que precisa ser destacado nessa classe é a linha emf =
Persistence.createEntityManagerFactory("artigo");
O parâmetro utilizado na criação do objeto tem o valor “artigo”. Este é exatamente o nome
definido na propriedade persistence-unit do arquivo persistence.xml, ou seja, é através deste
parâmetro que o Hibernate entende em que banco de dados deve estabelecer a conexão, e
com quais parâmetros.
A classe EntityManager disponibiliza métodos pelos quais os objetos podem ser manipulados:
remove: Exclui no banco de dados o registro na tabela referente ao objeto passado
como parâmetro.
createQuery: Permite a consulta de dados persistidos no banco de dados, recuperando-
os na forma de objetos.
persist: Envia os dados do objeto criado ou alterado para o banco de dados.
find: Realiza uma busca por um objeto através de seu identificador.
getTransaction: Obtém uma referência de um objeto do tipo EntityTransaction, o qual
permite o controle das transações.
 
Alguns dos métodos disponibilizados pela classe são:
 
begin: Método que indica o início de um bloco que deve ser controlado em um contexto
transacional.
commit: Método que permite efetivar todas as ações executadas no banco de dados
desde a execução do método begin.
rollback: Método que permite desfazer todas as ações executadas no banco de dados
desde a execução do método begin.
 
Apesar da classe EntityManager possuir métodos bem definidos para a manipulação dos
objetos, ainda existe a necessidade de iniciar a transação, executar a ação desejada sobre o
objeto e encerrar a transação, confirmando ou cancelando as ações.
Para eliminar essa responsabilidade do desenvolvedor, uma classe seguindo o padrão DAO é
a solução, conforme já apresentado.
Exercício 1:
Considere o excerto a seguir:
Em uma aplicação que utiliza Hibernate, uma I representa uma determinada
configuração de repositório de dados (data-store) lógicos. A I I tem o mesmo
papel em uma aplicação JPA, e configura-se uma II I com arquivos de
configuração ou em código da aplicação assim como se configuraria uma V I . A
configuração de uma V , junto com um conjunto de metadados de mapeamento
(normalmente classes anotadas), é chamada de VI .
22/08/2023, 11:14 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos.
https://online.unip.br/imprimir/imprimirconteudo 7/8
As lacunas I, II, III, IV, V e VI devem ser preenchidas, correta e respectivamente,
por:
A)
Java Transaction API - EntityManager - EntityManagerFactory - EntityTransaction -
Java Transaction API - persistence unit.
B)
EntityManager - EntityManager - EntityManagerFactory - EntityTransaction -
SessionFactory - driver.
C)
Connection - DriverManager - DriverManager - Connection - Connection -
statement.
D)
EntityTransaction - Connection - Connection - SessionFactory - Java Transaction
API - persistence unit.
E)
SessionFactory - EntityManagerFactory - EntityManagerFactory - SessionFactory -
EntityManagerFactory - unidade de persistência.
Comentários:
Essa disciplina não é ED ou você não o fez comentários
Exercício 2:
Por suas características, Hibernate 3.5 constitui uma ferramenta com a finalidade
de realizar o seguinte tipo de mapeamento:
A)
objeto/relacional para Java.
B)
gerencial/operacional para sites interativos textuais.
C)
22/08/2023, 11:14 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos.
https://online.unip.br/imprimir/imprimirconteudo 8/8
gerencial/operacional para sites interativos hipermídia.
D)
entidade/relacionamento para modelagem de dados.
E)
lógico/físico para desenvolvimento por meio da prototipação.
Comentários:
Essa disciplina não é ED ou você não o fez comentários
Exercício 3:
Linguagem de queries, fornecida pelo Hibernate, que é similar em aparência ao
SQL e que, no entanto, é orientada a objeto e compreende noções como herança,
polimorfismo e associação. Trata-se de:
A)
HiBD-QL.
B)
OOQL.
C)
ORM-QL.
D)
HQL.
E)
JEEQL.
Comentários:
Essa disciplina não é ED ou você não o fez comentários

Mais conteúdos dessa disciplina