Introduction à Prisma : un ORM moderne pour TypeScript
\n\nPrisma est un ORM (Object-Relational Mapping) moderne pour TypeScript et Node.js, qui change radicalement l'approche du travail avec les bases de données. Contrairement aux ORM traditionnels comme Sequelize ou TypeORM, Prisma propose un modèle de données déclaratif, une génération automatique de types et une API intuitive. La bibliothèque prend en charge PostgreSQL, MySQL, SQLite, SQL Server, MongoDB et CockroachDB.
\n\nL'objectif principal de Prisma est de rendre le travail avec les bases de données sûr, performant et pratique. Grâce à l'intégration avec TypeScript, vous bénéficiez de l'autocomplétion et de la vérification des types au moment de la compilation, ce qui réduit considérablement le nombre d'erreurs d'exécution. Prisma se compose de trois composants clés :
\n\n- \n
- Prisma Client — un client généré automatiquement pour travailler avec la base de données \n
- Prisma Migrate — un système de gestion des migrations \n
- Prisma Studio — une interface graphique pour visualiser et modifier les données \n
Installation de Prisma
\n\nL'installation de Prisma dans un projet TypeScript se fait via npm. Pour commencer, créez un nouveau projet :
\n\nmkdir my-prisma-project\ncd my-prisma-project\nnpm init -y\n\nInstallez Prisma CLI et Prisma Client :
\n\nnpm install prisma @prisma/client --save\n\nInitialisez Prisma dans le projet :
\n\nnpx prisma init\n\nCette commande crée le répertoire prisma avec le fichier schema.prisma et le fichier .env pour les variables d'environnement.
Démarrage rapide : exemple de code
\n\nConsidérons la création d'une application simple pour gérer les utilisateurs. Commençons par définir le modèle dans prisma/schema.prisma :
generator client {\n provider = "prisma-client-js"\n}\n\ndatasource db {\n provider = "sqlite"\n url = env("DATABASE_URL")\n}\n\nmodel User {\n id Int @id @default(autoincrement())\n email String @unique\n name String?\n posts Post[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Post {\n id Int @id @default(autoincrement())\n title String\n content String?\n published Boolean @default(false)\n author User @relation(fields: [authorId], references: [id])\n authorId Int\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nExécutez la migration pour créer les tables dans SQLite :
\n\nnpx prisma migrate dev --name init\n\nCréez maintenant un fichier index.ts avec un exemple d'utilisation :
import { PrismaClient } from '@prisma/client'\n\nconst prisma = new PrismaClient()\n\nasync function main() {\n // Création d'un utilisateur\n const user = await prisma.user.create({\n data: {\n email: 'alice@example.com',\n name: 'Alice',\n posts: {\n create: { title: 'Hello World' }\n }\n }\n })\n console.log('Utilisateur créé :', user)\n\n // Récupération de tous les utilisateurs avec leurs articles\n const users = await prisma.user.findMany({\n include: { posts: true }\n })\n console.log('Tous les utilisateurs :', JSON.stringify(users, null, 2))\n}\n\nmain()\n .catch(e => console.error(e))\n .finally(async () => await prisma.$disconnect())\n\nExécutez le code :
\n\nnpx ts-node index.ts\n\nMéthodes principales de Prisma Client
\n\n1. findUnique
\nCe qu'il fait : Trouve un enregistrement unique par identifiant unique (id, email, etc.).
\nParamètres :
\n- \n
where— objet avec les conditions de recherche (obligatoire) \n include— (optionnel) pour inclure les modèles liés \n select— (optionnel) pour sélectionner des champs spécifiques \n
Exemple :
\nconst user = await prisma.user.findUni