ORM - As melhores bibliotecas para JavaScript
Tags: javascript, library, orm, beginners
Published: 2022-02-25 15:46:58

![ORM](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rtim9ih6u0kuxuuvpvp6.png) 
 
ORM (Object-Relational Mapping) é uma técnica que ajuda você a consultar e manipular dados de bancos de dados usando um paradigma orientado a objetos. Hoje em dia os desenvolvedores gostam de usar ORMs por vários motivos como,

- Como temos que escrever um modelo de dados apenas em um lugar, é mais fácil atualizar, manter e reutilizar o código.
- Força você a escrever código MVC , o que torna seu código mais limpo.
- Não há necessidade de escrever consultas SQL.
- Não há necessidade de alterações no nível do banco de dados com frequência.
- A maior parte do trabalho é automatizada.

Mas também existem algumas desvantagens dos ORMs.

- Problema de desempenho com consultas complexas.
- Integração e aprendizado.

Apesar dessas desvantagens, o uso do ORM está se tornando mais popular entre os desenvolvedores e agora também existem várias bibliotecas. Neste artigo, falarei sobre 5 bibliotecas ORM que você pode usar para o desenvolvimento JavaScript.

### Sequelize

É um ORM Node.js baseado em promessa bem conhecido, que pode ser usado com MySQL, MariaDB, SQLite e Microsoft SQL Server e Postgres. (ser um ORM baseado em promessa significa que ele suporta promessas NodeJS). O Sequelize fornece um grande conjunto de recursos para desenvolvedores e essa biblioteca ficou mais famosa por causa desses recursos.

Podemos listar algumas vantagens/recursos principais do Sequelize da seguinte forma.

- Promessa baseada
- Suporta muitos sistemas de banco de dados.
- Suporte a transações
- Sincronização do banco de dados
- Migrações de banco de dados
- Validações de modelo
- Consultas brutas
- Semeadura de dados
- Relações ansiosas
- Fácil de testar

Como você pode ver, existem muitos prós de usar o Sequelize como seu ORM e ele também contém uma [rica documentação](https://sequelize.org/v5/index.html). Portanto, se você estiver procurando por um ORM estável para o seu projeto, o sequelize é um dos melhores de todos.

### TypeORM

Foi introduzido por volta de 2016 e sua popularidade aumentou rapidamente nos últimos 2, 3 anos. A principal razão por trás dessa popularidade é que o TypeORM suporta muito TypeScript e JavaScript (ES5, ES6, ES7, ES8). O TypeORM afirma que o objetivo é manter o suporte aos recursos JavaScript mais recentes e fornecer novos recursos para ajudar os desenvolvedores a trabalhar com qualquer tipo de tecnologia. Além disso, o TypeORM também suporta uma grande variedade de sistemas de gerenciamento de banco de dados, incluindo MySQL, MariaDB, Postgres, CockroachDB, SQLite, Microsoft SQL Server, Oracle, SAP Hana, sql.js e MongoDB.

Outra especialidade do TypeORM em comparação com outros ORMs JavaScript é que ele suporta os padrões Active Record e Data Mapper . Isso permite que os desenvolvedores escrevam códigos em aplicativos escaláveis ​​de alta qualidade, fracamente acoplados. Alguns outros recursos do TypeORM podem ser listados a seguir,

- Ele pode ser executado nas plataformas NodeJS, Browser, Cordova, PhoneGap, Ionic, React Native, NativeScript, Expo e Electron.
- Usando várias conexões de banco de dados.
- Configuração de conexão nos formatos JSON/XML/YML/ENV.
- Relações ansiosas e preguiçosas.
- Relações unidirecionais, bidirecionais e autorreferenciadas.
- Agrupamento de conexões.
- Gerente de entidade
- QueryBuilder de sintaxe elegante, flexível e poderoso.

Você pode encontrar uma lista completa de recursos do TypeORM lendo sua [documentação](https://typeorm.io/#/) e devo afirmar que, se você é um amante do TypeScript, este é o ORM mais adequado para você.

### Mongoose

Tenho certeza de que todos vocês já ouviram ou trabalharam com o Mongo DB, que é um sistema de banco de dados NoSQL baseado em documentos. Mongoose é uma ferramenta de modelagem de objetos projetada especificamente para Mongo DB. Portanto, isso é muito diferente do Sequelize e do TypeORM, pois eles suportavam mais de um sistema de gerenciamento de banco de dados.

No entanto, o Mongo DB foi projetado para funcionar em um ambiente assíncrono e também suporta promessas e retornos de chamada. Não é necessário usar o mongoose com o Mongo DB o tempo todo, mas há alguns benefícios em usá-lo com o Mongo DB.

- O Mongoose define um esquema para seus modelos de dados para que seus documentos sigam uma estrutura específica com tipos de dados predefinidos.
- O Mongoose possui validação integrada para definições de esquema.
- O Mongoose fornece operações opcionais de pré e pós-venda para modelos de dados. Isso facilita a definição de ganchos e funcionalidades personalizadas em leituras/gravações bem-sucedidas, etc.
- O Mongoose facilita o retorno de documentos atualizados ou resultados de consultas.

Por outro lado, o uso do mangusto não é recomendado quando se trata de consultas avançadas. Nesses casos, não é apenas difícil escrever consultas usando o mangusto, mas também pode reduzir o desempenho do programa. Se você estiver usando o Mongo DB, por que não tentar com o mongoose?

### Bookshelf 

É um novo (em comparação com os 3 ORMs anteriores) JavaScript ORM para NodeJS construído no construtor de consultas Knex SQL (você pode ler um pouco sobre [ele aqui](https://knexjs.org/)) e suporta os sistemas de gerenciamento de banco de dados PostgreSQL, MySQL e SQLite3.

O objetivo da estante é fornecer uma biblioteca simples para tarefas comuns ao consultar bancos de dados em JavaScript e formar relações entre esses objetos. O Bookshelf (leia a documentação [aqui](https://bookshelfjs.org/)) é simples de ler, entender e estender e não o força a usar nenhum esquema de validação específico também.

Alguns recursos do Bookshelf são,

- Suporta promessas.
- Suporta retornos de chamada.
- Suporte a transações.
- Carregamento da relação ansioso/aninhado.
- Associações polimórficas.
- Suporte para relações um-para-um, um-para-muitos e muitos-para-muitos.

### Objection.js

Também é outro ORM crescente para NodeJS, que ajuda você a utilizar todo o poder do SQL e seu mecanismo de banco de dados com facilidade. É mais preciso introduzir a objeção como um construtor de consultas relacionais. Objeção fornece todos os benefícios de um construtor de consultas SQL, mas também um poderoso conjunto de ferramentas para trabalhar com relações. Igual à estante, a objeção também é construída no construtor de consultas Knex SQL e suporta os sistemas de gerenciamento de banco de dados PostgreSQL, MySQL e SQLite3.

Podemos apontar algumas especialidades de objeção como segue,

- Suporte oficial datilografado.
- Validação de esquema JSON opcional.
- Métodos simples para buscar, inserir, atualizar e excluir objetos usando o poder do SQL.
- Transações fáceis de usar.
- Criação e migração automáticas de esquema de banco de dados a partir de definições de modelo.
- Uma visão totalmente orientada a objetos do seu banco de dados.

Esta é apenas uma seleção de bibliotecas muito úteis entre muitas outras. Se você estiver interessado em usar ORMs em seus projetos, será uma grande vantagem estar familiarizado com pelo menos algumas bibliotecas importantes como essas.

Fontes onde pesquisei esse conteúdo:

- https://sequelize.org/v5/index.html
- https://typeorm.io/#/
- https://mongoosejs.com/
- https://bookshelfjs.org/
- https://vincit.github.io/objection.js/guide/installation.html