ORM
(Object Relational Mapper)
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/
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
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
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)
Banco de Dados
com python e
PostgreSQL
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
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
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
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
FACOM | UFMS
Laboratório de Banco de Dados
Programas
Input
Output
SGBD
PSYCOPYG
Arquivos de
banco de
dados
Visão Geral
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)
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)
FACOM | UFMS
Laboratório de Banco de Dados 15
Executando comando SQL
EXECUTE
• Executa o comando SQL
connpsql.py
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.
FACOM | UFMS
Laboratório de Banco de Dados 17
Recuperando os resultados
FETCHALL
• FETCHALL():
• retorna todas as tuplas de uma consulta
FACOM | UFMS
Laboratório de Banco de Dados 18
Recuperando os resultados
FETCHONE
• FETCHONE():
• retorna uma única tupla (a primeira)
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.
FACOM | UFMS 20
Classe de
conexão
ConexaoPSQL.py
FACOM | UFMS 21
Utilizando a classe
connclasspsql.py
Banco de Dados
com python e
Mysql
23
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/
FACOM | UFMS
Laboratório de Banco de Dados
Programas
Input
Output
SGBD
PYMYSQL
Arquivos de
banco de
dados
Visão Geral
25
FACOM | UFMS 26
Iniciando PostgreSQL com Python
PYMYSQL
connmysql.py
Banco de Dados
com Java e
postgreSQL
27
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.
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.
FACOM | UFMS
Programas
Input
Output
SGBD
JDBC
Arquivos de
banco de
dados
Visão Geral
30
Pacote java.sql
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.
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.
FACOM | UFMS
Laboratório de Banco de Dados 33
JDBC - Integração do Java com o banco de dados
ConnectionMain.class
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.
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
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
FACOM | UFMS 37
JDBC - Integração do Java com o banco de dados
2. Teste da persistência utilizando JDBC
DepartamentoDAOTest.class
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
FACOM | UFMS
Laboratório de Banco de Dados 39
JPA - Integração do Java com o banco de dados
• Mapeamento
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

14-programacao-bd-Object Relational Mapper.pdf

  • 1.
  • 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óriode 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 dedados É possível fazer conexões com banco de dados direta ou por meio de ORMs • Python • Direta (procedimental / OO) • Java • Direta (JDBC) • ORM (hibernate)
  • 6.
    Banco de Dados compython e PostgreSQL 7
  • 7.
    Laboratório de Bancode 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óriode 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óriode 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óriode Banco de Dados Programas Input Output SGBD PSYCOPYG Arquivos de banco de dados Visão Geral 12
  • 12.
    FACOM | UFMS Laboratóriode 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óriode 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óriode Banco de Dados 15 Executando comando SQL EXECUTE • Executa o comando SQL connpsql.py
  • 15.
    FACOM | UFMS Laboratóriode 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óriode Banco de Dados 17 Recuperando os resultados FETCHALL • FETCHALL(): • retorna todas as tuplas de uma consulta
  • 17.
    FACOM | UFMS Laboratóriode Banco de Dados 18 Recuperando os resultados FETCHONE • FETCHONE(): • retorna uma única tupla (a primeira)
  • 18.
    FACOM | UFMS Laboratóriode Banco de Dados 19 Recuperando os resultados FETCHMANY • FETCHMANY(<size=cursor.arraysize]>): • retorna o número de tuplas informadas no parâmetro.
  • 19.
    FACOM | UFMS20 Classe de conexão ConexaoPSQL.py
  • 20.
    FACOM | UFMS21 Utilizando a classe connclasspsql.py
  • 21.
    Banco de Dados compython e Mysql 23
  • 22.
    FACOM | UFMS Laboratóriode 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óriode Banco de Dados Programas Input Output SGBD PYMYSQL Arquivos de banco de dados Visão Geral 25
  • 24.
    FACOM | UFMS26 Iniciando PostgreSQL com Python PYMYSQL connmysql.py
  • 25.
    Banco de Dados comJava e postgreSQL 27
  • 26.
    FACOM | UFMS Laboratóriode 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óriode 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.
  • 28.
    FACOM | UFMS Programas Input Output SGBD JDBC Arquivosde banco de dados Visão Geral 30 Pacote java.sql
  • 29.
    FACOM | UFMS Laboratóriode 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óriode 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óriode Banco de Dados 33 JDBC - Integração do Java com o banco de dados ConnectionMain.class
  • 32.
    FACOM | UFMS Laboratóriode 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 | UFMS35 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 | UFMS36 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 | UFMS37 JDBC - Integração do Java com o banco de dados 2. Teste da persistência utilizando JDBC DepartamentoDAOTest.class
  • 36.
    FACOM | UFMS Laboratóriode 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óriode Banco de Dados 39 JPA - Integração do Java com o banco de dados • Mapeamento
  • 38.
    FACOM | UFMS Laboratóriode 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