Table des matières
Carte de la relation d'objet
ORM Library
knex.js: SQL Query Builder
JavaScript Orm Library
séquelière
Maison interface Web js tutoriel 9 meilleurs orms JavaScript et TypeScript pour 2024

9 meilleurs orms JavaScript et TypeScript pour 2024

Feb 09, 2025 pm 12:55 PM

9 Best JavaScript and TypeScript ORMs for 2024

Cet article expliquera brièvement ce qu'est le mappage relationnel d'objet (ORM), ce qu'est ORM Library , et pourquoi vous devriez envisager de l'utiliser dans votre prochain projet JavaScript. Nous vous aiderons également à évaluer les meilleures bibliothèques ORM JavaScript et TypeScript en fonction de vos besoins en tant que développeur de projet et travailleur de maintenance.

Nous examinerons chacun des outils suivants:

  • knex.js: SQL Query Builder
  • séquelière
  • librairie
  • ligne de flottaison
  • objection.js
  • Mongoose
  • typegoose
  • TypeORM
  • mikroorm
  • prisma

Carte de la relation d'objet

La cartographie relationnelle des objets peut sembler compliquée, mais son objectif est de vous faciliter la vie en tant que programmeur. Pour obtenir des données de la base de données, vous devez rédiger une requête. Mais cela signifie-t-il que vous devez apprendre SQL? Non, le mappage relationnel d'objet vous permet d'écrire des requêtes dans la langue de votre choix.

Le mappage relationnel des objets est une technique qui convertit les résultats de la requête de la base de données en instances de classe d'entité. Les entités ne sont que des emballages d'objets pour les tables de base de données. Il contient des propriétés mappées à la colonne de table de base de données. Les instances d'entité ont des méthodes pour effectuer des opérations CRUD et prendre en charge d'autres fonctionnalités qui incluent une logique personnalisée telle que la vérification et le chiffrement des données.

Si vous construisez un petit projet, vous n'avez pas besoin d'installer la bibliothèque ORM. Il suffit d'utiliser des instructions SQL pour piloter votre application. ORM est très bénéfique pour les projets moyens et grands qui obtiennent des données de centaines de tables de base de données. Dans ce cas, vous avez besoin d'un cadre qui vous permet de fonctionner et de maintenir la couche de données de votre application de manière cohérente et prévisible.

Les cours d'entités sont des éléments constitutifs des applications commerciales, car ils sont conçus pour encapsuler la logique utilisée pour implémenter les règles métier. Les règles commerciales sont définies pour garantir que les processus automatisés ne sont exécutés que dans le cadre des politiques commerciales. Des exemples de règles commerciales comprennent:

  • Remise des clients
  • Approbation du prêt
  • Commission des ventes
  • Calcul des expéditions et des impôts

ORM Library

Le cartographie relationnelle des objets se fait généralement à l'aide des bibliothèques. Le terme ORM fait le plus souvent référence à la bibliothèque ORM réelle - Relation de l'objectif mappeur - il fait le travail de la cartographie des relations d'objet pour vous.

Les règles métier nécessitent généralement l'exécution par lots de plusieurs instructions SQL. Si une seule instruction SQL échoue, elle peut laisser la base de données dans un état incohérent. La plupart des bibliothèques ORM prennent en charge une fonctionnalité appelée Transactions, ce qui empêche de tels événements de se produire. Si l'instruction SQL ne parvient pas à s'exécuter dans ce contexte de transaction, toutes les autres instructions SQL qui ont été exécutées avec succès dans ce lot sont non dotées par une opération appelée Rollback.

Par conséquent, l'utilisation de la bibliothèque ORM pour créer votre couche de données permet de garantir que la base de données est toujours cohérente. La bibliothèque ORM contient généralement des fonctions plus basiques, telles que:

  • Builder de requête
  • Script de migration
  • outil CLI pour générer le code de la plaque de chauffeur
  • Fonction de truie pour les tables de pré-remplissage avec des données de test

Dans cet article, je fournirai un extrait de code sur la façon dont chaque bibliothèque ORM fait ce qui suit:

  • Paramètres initiaux et configuration
  • Fonctionnement de CRUD de base
  • Fonctionnement de la requête avancée

J'inclut également des informations importantes telles que la date de lancement, le nombre d'utilisateurs et les liens de documents, ainsi que les canaux de support disponibles. Je discuterai également des questions les plus importantes liées aux performances de la requête, à la maintenance de la bibliothèque et à la philosophie de l'architecture que vous devez peser soigneusement lors de vos décisions.

J'ai trié la liste à la date de début du plus ancien au dernier. J'ai divisé la liste en deux parties selon les principaux langages pris en charge: JavaScript et TypeScript.

Avant de commencer l'évaluation, regardons d'abord Knex.js, un constructeur de requête SQL populaire qui a été intégré à de nombreuses bibliothèques ORM répertoriées ici. Knex.js est très flexible et fonctionne généralement mieux que certaines bibliothèques ORM qui ont leur propre implémentation intégrée de constructeurs de requêtes. Considérez cela comme un avantage lors du choix d'une bibliothèque ORM pour utiliser Knex.js comme base.

knex.js: SQL Query Builder

  • Début: décembre 2012
  • Site Web
  • github: 158,6k utilisateurs
  • Bases de données: Postgres, MSSQL, MySQL, MARIADB, SQLITE3, Oracle et Amazon Redshift

knex.js est actuellement le constructeur de requête SQL JavaScript le plus mature qui peut fonctionner dans Node.js et dans les navigateurs (via WebPack ou Browserify). Il est capable de générer les mêmes requêtes SQL haute performance que les instructions SQL écrites manuellement.

Alors, qu'est-ce qu'un constructeur de requêtes?

C'est juste une API qui fournit un ensemble de fonctions qui peuvent être liées entre elles pour former des requêtes. Voici un exemple:

<code>knex({ a: 'table', b: 'table' })
  .select({
    aTitle: 'a.title',
    bTitle: 'b.title'
  })
  .whereRaw('?? = ??', ['a.column_1', 'b.column_2'])

SQL 输出:
select `a`.`title` as `aTitle`, `b`.`title` as `bTitle` from `table`
as `a`, `table` as `b` where `a`.`column_1` = `b`.`column_2`
</code>
Copier après la connexion
Copier après la connexion

Cela pose la question, pourquoi devriez-vous utiliser un constructeur de requête au lieu d'écrire des instructions SQL originales? Je vais vous donner quatre raisons:

  • Il vous aide à résumer votre code du dialecte SQL de votre base de données, ce qui facilite le changement.
  • Il élimine ou réduit considérablement le risque d'attaques d'injection SQL sur votre application.
  • Il permet une construction facile de requêtes avec des conditions dynamiques.
  • Il a d'autres fonctions et outils CLI pour effectuer des opérations de développement de bases de données.

Ces fonctions incluent:

  • Pool de connexion
  • Rappel et promesse interface
  • Stream Interface
  • Prise en charge des transactions
  • Prise en charge du mode
  • migration
  • Semer les graines

L'installation de l'installation dans votre application vous oblige à installer le package knex.js et le pilote de la base de données que vous utilisez:

<code>$ npm install knex --save

# 然后添加以下一个(添加 --save)标志:
$ npm install pg
$ npm install sqlite3
$ npm install mysql
$ npm install mysql2
$ npm install oracledb
$ npm install mssql
</code>
Copier après la connexion
Copier après la connexion

Il s'agit d'un exemple de code de configuration:

<code>const knex = require('knex')({
  client: 'mysql',
  connection: {
    host : '127.0.0.1',
    user : 'your_database_user',
    password : 'your_database_password',
    database : 'myapp_test'
  }
});

knex.schema.createTable('users', function (table) {
  table.increments();
  table.string('name');
  table.timestamps();
})

输出:
create table `users` (`id` int unsigned not null auto_increment primary key, `name` varchar(255),
`created_at` datetime, `updated_at` datetime)
</code>
Copier après la connexion
Copier après la connexion

Il s'agit d'un exemple de requête de base:

<code>knex('users').where({
  first_name: 'Test',
  last_name:  'User'
}).select('id')

输出:
select `id` from `users` where `first_name` = 'Test' and `last_name` = 'User'
</code>
Copier après la connexion
Copier après la connexion

prend également en charge les instructions SQL brutes. Voici un exemple de requête complexe:

<code>const subcolumn = knex.raw('select avg(salary) from employee where dept_no = e.dept_no')
.wrap('(', ') avg_sal_dept');

knex.select('e.lastname', 'e.salary', subcolumn)
.from('employee as e')
.whereRaw('dept_no = e.dept_no')

输出:
select `e`.`lastname`, `e`.`salary`, (select avg(salary) from employee where dept_no = e.dept_no)
avg_sal_dept from `employee` as `e` where dept_no = e.dept_no
</code>
Copier après la connexion
Copier après la connexion

knex.js prend également en charge TypeScript, ce qui est génial car il vous permet d'écrire du code comme celui-ci:

<code>knex({ a: 'table', b: 'table' })
  .select({
    aTitle: 'a.title',
    bTitle: 'b.title'
  })
  .whereRaw('?? = ??', ['a.column_1', 'b.column_2'])

SQL 输出:
select `a`.`title` as `aTitle`, `b`.`title` as `bTitle` from `table`
as `a`, `table` as `b` where `a`.`column_1` = `b`.`column_2`
</code>
Copier après la connexion
Copier après la connexion

Dans l'exemple de type ci-dessus, knex.js agit presque comme un orm. Cependant, aucune instance d'objet entité n'est créée. Au lieu de cela, utilisez des définitions d'interface pour créer des objets JavaScript avec des propriétés de type type.

Notez que de nombreuses bibliothèques ORM répertoriées dans cet article utilisent Knex.js en arrière-plan. Ceux-ci incluent:

  • librairie
  • objection.js
  • mikroorm

Les bibliothèques ORM fournissent généralement des fonctionnalités supplémentaires au-dessus de Knex.js. Jetons un œil à-les dans la section suivante.

JavaScript Orm Library

Dans cette catégorie, toutes les bibliothèques répertoriées ici sont écrites en javascript et peuvent être exécutées directement dans Node.js. La prise en charge de TypeScript est fournie via des types de types intégrés ou des packages de définition de types / nœuds. Si vous souhaitez une prise en charge de premier ordre pour votre projet TypeScript, vous devez passer à la section TypeScript Orm Library.

Dans la couche d'accès aux données, deux modèles architecturaux populaires sont utilisés:

  • Data Mapper
  • Enregistrement d'activité

En utilisant le motif de mappeur de données, la classe d'entité est pure et ne contient que des propriétés. Les opérations CRUD et les règles commerciales sont mises en œuvre dans des conteneurs appelés référentiels. Voici un exemple:

<code>$ npm install knex --save

# 然后添加以下一个(添加 --save)标志:
$ npm install pg
$ npm install sqlite3
$ npm install mysql
$ npm install mysql2
$ npm install oracledb
$ npm install mssql
</code>
Copier après la connexion
Copier après la connexion

La logique des opérations CRUD et des règles métier est implémentée dans la classe d'entité en utilisant le mode d'enregistrement actif. Voici un exemple similaire qui illustre ce qui précède:

<code>const knex = require('knex')({
  client: 'mysql',
  connection: {
    host : '127.0.0.1',
    user : 'your_database_user',
    password : 'your_database_password',
    database : 'myapp_test'
  }
});

knex.schema.createTable('users', function (table) {
  table.increments();
  table.string('name');
  table.timestamps();
})

输出:
create table `users` (`id` int unsigned not null auto_increment primary key, `name` varchar(255),
`created_at` datetime, `updated_at` datetime)
</code>
Copier après la connexion
Copier après la connexion

L'utilisation de l'un ou l'autre mode a ses avantages et ses inconvénients. Ces modèles ont été nommés par Martin Fowler dans son livre de 2003 Book Enterprise Architecture Patterns. Si vous voulez en savoir plus sur ce sujet, vous devriez consulter ce livre. La plupart des bibliothèques ORM répertoriées dans cet article prennent en charge un ou les deux modes.

Commençons par les prêter attention maintenant.

séquelière

  • Démarrer: juillet 2010
  • Site Web
  • github: 726k utilisateurs
  • Slack
  • Bases de données: Postgres, MySQL, MARIADB, SQLITE et Microsoft SQL Server

Sequelize est une bibliothèque Node.js ORM très mature et populaire avec une excellente documentation avec des exemples de code bien expliqués. Il prend en charge de nombreuses fonctionnalités de couche de données que nous avons mentionnées dans les bibliothèques précédentes. Contrairement à la bibliothèque, il a son propre constructeur de requêtes qui se produit ainsi que Knex.js.

L'installation de la bibliothèque est très simple, et le pilote de base de données est également très direct:

<code>knex('users').where({
  first_name: 'Test',
  last_name:  'User'
}).select('id')

输出:
select `id` from `users` where `first_name` = 'Test' and `last_name` = 'User'
</code>
Copier après la connexion
Copier après la connexion

Ce qui suit est un code de configuration et des exemples de CRUD et des instructions de requête de base:

<code>const subcolumn = knex.raw('select avg(salary) from employee where dept_no = e.dept_no')
.wrap('(', ') avg_sal_dept');

knex.select('e.lastname', 'e.salary', subcolumn)
.from('employee as e')
.whereRaw('dept_no = e.dept_no')

输出:
select `e`.`lastname`, `e`.`salary`, (select avg(salary) from employee where dept_no = e.dept_no)
avg_sal_dept from `employee` as `e` where dept_no = e.dept_no
</code>
Copier après la connexion
Copier après la connexion

Ce qui suit est un exemple de la façon d'écrire une requête complexe:

<code>import { Knex, knex } from 'knex'

interface User {
  id: number;
  age: number;
  name: string;
  active: boolean;
  departmentId: number;
}

const config: Knex.Config = {
  client: 'sqlite3',
  connection: {
    filename: './data.db',
  },
};

const knexInstance = knex(config);

try {
  const users = await knex<user>('users').select('id', 'age');
} catch (err) {
  // 错误处理
}
</user></code>
Copier après la connexion

Dans le dernier exemple de requête complexe, la sortie SQL est:

<code>const repository = connection.getRepository(User);.

const user = new User();
user.firstName = "Timber";
await repository.save(user);

const allUsers = await repository.find();
</code>
Copier après la connexion

Sequelize prend en charge les instructions SQL brutes, qui donne aux développeurs la flexibilité d'écrire des instructions SQL complexes et haute performance. Les résultats peuvent également être mappés à l'instance de l'entité de l'objet. Voici un exemple:

<code>const user = new User();
user.firstName = "Timber";
await user.save();

const allUsers = await User.find();
</code>
Copier après la connexion

Le principal inconvénient du séquelle est qu'il ralentit en développement et que les problèmes s'accumulent et ne sont pas résolus. Heureusement, un responsable a annoncé que la bibliothèque attirerait l'attention qu'elle mérite à partir de 2021. Notez que tous les projets de bibliothèque ORM dans cet article sont open source et qu'ils nécessitent l'aide des développeurs pour l'améliorer.

La partie restante est similaire au texte d'entrée. En raison des limites de l'espace, cet endroit ne sera pas élargi. Veuillez noter que le format d'image reste le même.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Grow A Garden - Guide de mutation complet
3 Il y a quelques semaines By DDD
<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Système de fusion, expliqué
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1666
14
Tutoriel PHP
1273
29
Tutoriel C#
1253
24
Moteurs JavaScript: comparaison des implémentations Moteurs JavaScript: comparaison des implémentations Apr 13, 2025 am 12:05 AM

Différents moteurs JavaScript ont des effets différents lors de l'analyse et de l'exécution du code JavaScript, car les principes d'implémentation et les stratégies d'optimisation de chaque moteur diffèrent. 1. Analyse lexicale: convertir le code source en unité lexicale. 2. Analyse de la grammaire: générer un arbre de syntaxe abstrait. 3. Optimisation et compilation: générer du code machine via le compilateur JIT. 4. Exécuter: Exécutez le code machine. Le moteur V8 optimise grâce à une compilation instantanée et à une classe cachée, SpiderMonkey utilise un système d'inférence de type, résultant en différentes performances de performances sur le même code.

Python vs JavaScript: la courbe d'apprentissage et la facilité d'utilisation Python vs JavaScript: la courbe d'apprentissage et la facilité d'utilisation Apr 16, 2025 am 12:12 AM

Python convient plus aux débutants, avec une courbe d'apprentissage en douceur et une syntaxe concise; JavaScript convient au développement frontal, avec une courbe d'apprentissage abrupte et une syntaxe flexible. 1. La syntaxe Python est intuitive et adaptée à la science des données et au développement back-end. 2. JavaScript est flexible et largement utilisé dans la programmation frontale et côté serveur.

De C / C à JavaScript: comment tout cela fonctionne De C / C à JavaScript: comment tout cela fonctionne Apr 14, 2025 am 12:05 AM

Le passage de C / C à JavaScript nécessite de s'adapter à la frappe dynamique, à la collecte des ordures et à la programmation asynchrone. 1) C / C est un langage dactylographié statiquement qui nécessite une gestion manuelle de la mémoire, tandis que JavaScript est dynamiquement typé et que la collecte des déchets est automatiquement traitée. 2) C / C doit être compilé en code machine, tandis que JavaScript est une langue interprétée. 3) JavaScript introduit des concepts tels que les fermetures, les chaînes de prototypes et la promesse, ce qui améliore la flexibilité et les capacités de programmation asynchrones.

Javascript et le web: fonctionnalité de base et cas d'utilisation Javascript et le web: fonctionnalité de base et cas d'utilisation Apr 18, 2025 am 12:19 AM

Les principales utilisations de JavaScript dans le développement Web incluent l'interaction client, la vérification du formulaire et la communication asynchrone. 1) Mise à jour du contenu dynamique et interaction utilisateur via les opérations DOM; 2) La vérification du client est effectuée avant que l'utilisateur ne soumette les données pour améliorer l'expérience utilisateur; 3) La communication de rafraîchissement avec le serveur est réalisée via la technologie AJAX.

JavaScript en action: Exemples et projets du monde réel JavaScript en action: Exemples et projets du monde réel Apr 19, 2025 am 12:13 AM

L'application de JavaScript dans le monde réel comprend un développement frontal et back-end. 1) Afficher les applications frontales en créant une application de liste TODO, impliquant les opérations DOM et le traitement des événements. 2) Construisez RestulAPI via Node.js et Express pour démontrer les applications back-end.

Comprendre le moteur JavaScript: détails de l'implémentation Comprendre le moteur JavaScript: détails de l'implémentation Apr 17, 2025 am 12:05 AM

Comprendre le fonctionnement du moteur JavaScript en interne est important pour les développeurs car il aide à écrire du code plus efficace et à comprendre les goulots d'étranglement des performances et les stratégies d'optimisation. 1) Le flux de travail du moteur comprend trois étapes: analyse, compilation et exécution; 2) Pendant le processus d'exécution, le moteur effectuera une optimisation dynamique, comme le cache en ligne et les classes cachées; 3) Les meilleures pratiques comprennent l'évitement des variables globales, l'optimisation des boucles, l'utilisation de const et de locations et d'éviter une utilisation excessive des fermetures.

Python vs JavaScript: communauté, bibliothèques et ressources Python vs JavaScript: communauté, bibliothèques et ressources Apr 15, 2025 am 12:16 AM

Python et JavaScript ont leurs propres avantages et inconvénients en termes de communauté, de bibliothèques et de ressources. 1) La communauté Python est amicale et adaptée aux débutants, mais les ressources de développement frontal ne sont pas aussi riches que JavaScript. 2) Python est puissant dans les bibliothèques de science des données et d'apprentissage automatique, tandis que JavaScript est meilleur dans les bibliothèques et les cadres de développement frontaux. 3) Les deux ont des ressources d'apprentissage riches, mais Python convient pour commencer par des documents officiels, tandis que JavaScript est meilleur avec MDNWEBDOCS. Le choix doit être basé sur les besoins du projet et les intérêts personnels.

Python vs JavaScript: environnements et outils de développement Python vs JavaScript: environnements et outils de développement Apr 26, 2025 am 12:09 AM

Les choix de Python et JavaScript dans les environnements de développement sont importants. 1) L'environnement de développement de Python comprend Pycharm, Jupyternotebook et Anaconda, qui conviennent à la science des données et au prototypage rapide. 2) L'environnement de développement de JavaScript comprend Node.js, VScode et WebPack, qui conviennent au développement frontal et back-end. Le choix des bons outils en fonction des besoins du projet peut améliorer l'efficacité du développement et le taux de réussite du projet.

See all articles