Criação de um Micro ORM
Tags: software, database, orm, sql
Published: 2022-03-18 16:37:42


ORM (ou Mapeamento de Objecto Relacional) é uma técnica de desenvolvimento utilizada converter tabelas do banco de dados em classes e reduzir a dificuldade na manipulação de bancos de dados relacionais.
Micro ORM é um subconjunto de um ORM, isto é, possui menos funcionalidades.

## Porque usar um ORM?
Os ORMs trazem muitas vantagens, entre elas:
- Mapeamento classe – tabela da base de dados;
- O registo da base, torna-se um objecto;
- Abstração de consultas SQL, evitando repetição
- Uso de SQL bruto (Raw SQL), quando necessário;
- Abstração das configurações da base de  dados;
- Migração de dados;

## Como construir um Micro ORM ?
Para construir um micro orm precisamos dos seguintes itens:
- Configuração: Host, Porta, nome da base dados e palavra passe;
- Conexão: Conexão com um ou mais bases de acordo a configuração;
- Classe para representar a tabela, com a sua chave e as operações básicas;
- Classe para construção de consultas mais complexas (Query Builder);
- Mecanismo de serialização de dados vindo da BD.

## Exemplos de ORMs
A maioria das linguagens possuem ORMs conceituados entre elas:	
- PHP: Doctrine e Eloquent;
- Elixir: Ecto;
- Java: Hibernate e JPA;
- C#: Entity e Dapper;
- Python: SQLAlchemy e Django ORM;
- Ruby: ActiveRecord e DataMaper;
- Go: Gorm;

**Observação:**  Em muitos casos, os ORMs exigem uma configuração complexa além de serem difíceis de manusear. Alguns programadores sentem-se presos na estrutura do ORM. Noutros alguns casos a configuração é feita num arquivo XML ou anotações (Ex: Hibernate) e noutros uma simples operação é necessário invocar muitos objectos.

Há linguagens facilitam a uso de ORMs, devido a facilidade de serialização de objectos e a manipulação de estrututuras com chave valor (arrays associativos ou dicionários). Nessas linguagens o acesso ao dados torna-se natural, tais como: Javascript, PHP e Python.

**Exemplo:**  Neste exemplo vamos criar um micro ORM em PHP para os bancos MySQL e PostgreSQL.
**Problema:** Criar uma base de dados para Clientes. Os clientes possuem dados pessoais e contactos. 


Diagrama de Classes
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5dliewcebtg7h7vo9ze7.jpg)

Trecho de Código Table
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zvckia6ge2wfof1rozp6.jpg)

Trecho de código Query
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3rsyn64cafazeanetx94.jpg)

Modelo Lógico (Clientes e Contactos)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gm8dpf1pyvy80aw9wx14.jpg)

Exemplo Query
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/92uqnyq3sm9g169xt4rm.jpg)

Exemplo Table
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pebh5pxv2rq2ywta38r7.jpg)

Listagem de todos os Clientes
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o0dwfy996u0hvdsiebaz.jpg)

Filtros
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cvvzzlx1ttcp4h4yzkc0.jpg)

Intervalo de valores
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/86owe6f05lqd1s9q3cwc.jpg)

Queiries
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d75snhzjmnh8mfumc6xm.jpg)


Código disponível em: https://www.github.com/ortizdavid/php-micro-orm
Para mais artigos: 
https://www.dev.to/ortizdavid
https://www.medium.com/@ortizaad1994