2. FACOM | UFMS
ORM (Object Relational Mapper)
• Desenvolvido com o objetivo de flexibilizar o modelo relacional (ainda não havia nosql)
• Técnica de mapeamento objeto relacional que permite fazer uma relação entre a programação orientada a objetos
e o modelo relacional de banco de dados
• Realiza mapeamento e manipulação dos dados
• Existem inúmeros frameworks disponíveis para diversas linguagens de programação
• Exemplos:
• Java – Hibernate
• C# – Entity Framework, Nhibernate
• PHP – RedBeanPHP, Doctrine, Propel, Eloquent (Laravel)
• Python – DjangoORM, SqlAlchemy
• NodeJS – Sequelize
• A representação é feita por meio de classes, métodos e propriedades
• O Framework faz a abstração do SQL
• Possui os métodos de CRUD – (create, read, update and delete)
• Detalhes de conexões e queries/
3. FACOM | UFMS
Laboratório de Banco de Dados
Banco de dados relacional
Visão Geral
3
Camada
de
mapeamento
ORM
Objetos em memória
Tabelas e restrições
em banco de dados
4. FACOM | UFMS
ORM (Object Relational Mapper)
• Vantagens
• Independência de SGBD
• Facilidade de migração
• Produtividade e redução de código
• Cache de dados
• Segurança (sql injection por exemplo)
• Arquitetura de software bem definida (necessário uma camada de integração com o
banco de dados)
• Desvantagens
• Modelos mais complexos de entidades e relacionamentos podem causar dificuldades no
mapeamento para ORM. Assim, o ORM pode não tratar corretamente
• Necessário ter um bom conhecimento do funcionamento interno do ORM
• Em alguns casos, é necessário utilizar queries diretamente
• Aprender a utilizar um ORM pode ser mais complicado do que utilizar o SQL. Ainda mais
se você trabalhar com ORMs diferentes para linguagens de programações diferentes
5. Programação
integrada com
banco de dados
É possível fazer conexões com
banco de dados direta ou por
meio de ORMs
• Python
• Direta (procedimental / OO)
• Java
• Direta (JDBC)
• ORM (hibernate)
7. Laboratório de Banco de Dados
Programas
Input
Output
SGBD
SQL
Arquivos de
banco de
dados
Visão Geral
Conexão com o SGBD: cada
linguagem possui uma forma de
se comunicar (ODBC)
8
8. FACOM | UFMS
• Criada pelo holandês Guido Van Rossun em 1991, no instituto de
pesquisa nacional para matemática e ciência da computação de
Amsterdam
• Linguagem de programação de alto nível
• Totalmente OO
• Multiplataforma (Windows, Linux, etc)
• Quem utiliza?
• Google, Yahoo, Nasa, Globo.com, Nokia, IBM, etc
• Tipagem dinâmica
9
9. FACOM | UFMS
Laboratório de Banco de Dados 10
Tipos de dados
Python Postgresql
int integer, smallint
long bigint
float real, double
Decimal numeric
bool boolean
str text, varchar, char
list array
dict tipos personalizados
None null
10. FACOM | UFMS
Laboratório de Banco de Dados 11
Iniciando PostgreSQL com Python
PSYCOPG
• Uma das maneiras da linguagem Python reconhecer o banco de dados
PostgreSQL é por meio do adaptador PSYCOPG, que é considerado o
mais utilizado.
Documentação psycopy: http://initd.org/psycopg/docs/index.html
11. FACOM | UFMS
Laboratório de Banco de Dados
Programas
Input
Output
SGBD
PSYCOPYG
Arquivos de
banco de
dados
Visão Geral
12
12. FACOM | UFMS
Laboratório de Banco de Dados 13
Abrindo uma conexão
CONNECT
• dbname – the database name (database is a deprecated alias)
• user – user name used to authenticate
• password – password used to authenticate
• host – database host address (defaults to UNIX socket if not provided)
• port – connection port number (defaults to 5432 if not provided)
13. FACOM | UFMS
Laboratório de Banco de Dados 14
Abrindo um cursor
CURSOR
• Responsável pela instância de persistência (realiza as transações a partir da conexão
do banco de dados corrente)
14. FACOM | UFMS
Laboratório de Banco de Dados 15
Executando comando SQL
EXECUTE
• Executa o comando SQL
connpsql.py
15. FACOM | UFMS
Laboratório de Banco de Dados 16
Recuperando os resultados
FETCHONE / FETCHALL / FETCHMANY
• Os métodos a seguir são utilizados para recuperar os dados do banco de dados após
a chamada do comando execute(<sql>)
• FETCHONE():
• retorna uma única tupla (a primeira)
• FETCHALL():
• retorna todas as tuplas de uma consulta
• FETCHMANY(<size=cursor.arraysize]>):
• retorna o número de tuplas informadas no parâmetro.
16. FACOM | UFMS
Laboratório de Banco de Dados 17
Recuperando os resultados
FETCHALL
• FETCHALL():
• retorna todas as tuplas de uma consulta
17. FACOM | UFMS
Laboratório de Banco de Dados 18
Recuperando os resultados
FETCHONE
• FETCHONE():
• retorna uma única tupla (a primeira)
18. FACOM | UFMS
Laboratório de Banco de Dados 19
Recuperando os resultados
FETCHMANY
• FETCHMANY(<size=cursor.arraysize]>):
• retorna o número de tuplas informadas no parâmetro.
19. FACOM | UFMS 20
Classe de
conexão
ConexaoPSQL.py
20. FACOM | UFMS 21
Utilizando a classe
connclasspsql.py
22. FACOM | UFMS
Laboratório de Banco de Dados 24
Iniciando PostgreSQL com Python
PYMYSQL
• Uma das maneiras da linguagem Python reconhecer o banco de dados
MySQL é por meio do adaptador PYMYSQL
Documentação pymysql: https://pymysql.readthedocs.io/en/latest/
23. FACOM | UFMS
Laboratório de Banco de Dados
Programas
Input
Output
SGBD
PYMYSQL
Arquivos de
banco de
dados
Visão Geral
25
26. FACOM | UFMS
Laboratório de Banco de Dados
Integração do Java com o banco de dados
28
1. Usando JDBC: uma API (biblioteca de persistência em banco de dados relacionais do
Java) para conexão com o banco de dados denominada Java DataBase Connectivity -
JDBC,
• Consiste em um conjunto de classes e interfaces (API) escritas em Java que fazem o
envio de instruções SQL para qualquer banco de dados relacional.
2. Usando JPA: Java Persistence API, JPA.
• Consiste em padrão da linguagem Java que descreve uma interface comum para
frameworks de persistência de dados.
27. FACOM | UFMS
Laboratório de Banco de Dados
Integração do Java com o banco de dados
29
• Um ponto que deve ser observado é que as criações,
alterações, inserções, seleções, manipulações em geral
ficam por responsabilidade do programador através de
SQL, ele deve fornecer os comandos que deseja
executar no banco de dados.
• A JDBC é responsável apenas pela conexão com o
banco, envio de instruções e devolução dos dados e não
pela manipulação dos dados em si.
29. FACOM | UFMS
Laboratório de Banco de Dados 31
JDBC - Integração do Java com o banco de dados
1. Conectar-se a um banco de dados qualquer através da API JDBC;
2. Criar uma fábrica de conexões usando o design pattern Factory;
3. Pesquisar dados por meio de queries;
4. Encapsular suas operações com bancos de dados através de DAO - Data
Access Object.
30. FACOM | UFMS
Laboratório de Banco de Dados 32
JDBC - Integração do Java com o banco de dados
1. Conectar-se a um banco de dados qualquer através da API JDBC;
• A conexão a um banco de dados é feita de modo a evitar que cada banco tenha a
sua própria API e um conjunto de classes e métodos, temos um único conjunto de
interfaces muito bem definidas que devem ser implementadas.
• Esse conjunto de interfaces fica dentro do pacote java.sql e nos referiremos a ele como JDBC.
• Entre as diversas interfaces deste pacote, existe a interface Connection, que define
métodos para executar uma query (como um insert e select), commit de transação,
fechar a conexão, entre outros.
31. FACOM | UFMS
Laboratório de Banco de Dados 33
JDBC - Integração do Java com o banco de dados
ConnectionMain.class
32. FACOM | UFMS
Laboratório de Banco de Dados 34
JDBC - Integração do Java com o banco de dados
2. Criar uma fábrica de conexões usando o design Pattern Factory e DAO;
Factory (fábrica)
• Encapsula a instanciação de tipos concretos
DAO (Data Access Object)
• Separa a lógica de negócio da lógica de persistência de dados
• Responsável por trocar informações com o SGBD fornecendo operações de CRUD
Os Design Patterns são uma coleção de padrões de projeto de software que contém soluções
para problemas conhecidos e recorrentes no desenvolvimento de software descrevendo uma
solução comprovada para um problema de projeto recorrente.
33. FACOM | UFMS 35
JDBC - Integração do Java com o banco de dados
2. Criar uma fábrica de conexões usando o design Pattern Factory
ConnectionFactory.class
34. FACOM | UFMS 36
JDBC - Integração do Java com o banco de dados
2. Criar uma classe DAO para separa a lógica de persistência
DepartamentoDAO.class
35. FACOM | UFMS 37
JDBC - Integração do Java com o banco de dados
2. Teste da persistência utilizando JDBC
DepartamentoDAOTest.class
36. FACOM | UFMS
Laboratório de Banco de Dados 38
JPA - Integração do Java com o banco de dados
• JPA (Java Persistence API) – ferramenta de mapeamento objeto-relacional
(ORM - Object-relational mapping)
• Hibernate ferramento ORM open source que é uma inspiração para o JPA
• Hibernate:
• Abstrai o seu código SQL e a camada JDBC (são gerados em tempo de execução)
• Gera o SQL de acordo com o SGBD, tornando transparente dentro do Java a mudança de um
SGBD para outro
37. FACOM | UFMS
Laboratório de Banco de Dados 39
JPA - Integração do Java com o banco de dados
• Mapeamento
38. FACOM | UFMS
Laboratório de Banco de Dados
Links úteis
• Material de programação com python: https://www.py4e.com/book
• https://jdbc.postgresql.org/documentation/80/connect.html
• https://www.caelum.com.br/apostila-java-web/uma-introducao-pratica-
ao-jpa-com-hibernate/
• https://www.jetbrains.com/help/idea/2016.1/creating-persistence-
units.html
40