mikro-orm TypeScript: पूर्ण गाइड, उदाहरण और सेटअप
1. यह क्या है और इसकी आवश्यकता क्यों है?
Mikro-ORM एक आधुनिक ऑब्जेक्ट-रिलेशनल लाइब्रेरी (ORM) है जो TypeScript और JavaScript (Node.js) के लिए डिज़ाइन की गई है। यह Identity Map और Unit of Work पैटर्न को लागू करती है। TypeORM या Sequelize जैसी पारंपरिक ORM के विपरीत, Mikro-ORM Doctrine (PHP) और Hibernate (Java) से प्रेरित है और एंटिटी की स्थिति और डेटाबेस के साथ सिंक्रोनाइज़ेशन का अधिक पूर्वानुमानित प्रबंधन प्रदान करती है।
इसकी आवश्यकता क्यों है? सामान्य वेब एप्लिकेशन में, डेवलपर्स को अक्सर "गंदे" डेटा की समस्या का सामना करना पड़ता है, जब एक ही रिकॉर्ड को कोड के विभिन्न स्थानों पर दो बार लोड किया जाता है, जिससे सेव करते समय विरोध उत्पन्न होता है। Mikro-ORM Identity Map के माध्यम से इस समस्या को हल करती है: प्रत्येक प्राथमिक कुंजी के लिए, एक EntityManager संदर्भ में एंटिटी का केवल एक इंस्टेंस होता है। यह सुनिश्चित करता है कि आप हमेशा ऑब्जेक्ट के नवीनतम संस्करण के साथ काम कर रहे हैं, और सभी परिवर्तन स्वचालित रूप से ट्रैक किए जाते हैं।
यह लाइब्रेरी कई DBMS (PostgreSQL, MySQL, SQLite, MongoDB, MariaDB) को सपोर्ट करती है और शक्तिशाली टूल प्रदान करती है: माइग्रेशन, बिल्ट-इन ट्रांज़ैक्शन सपोर्ट, कैस्केड ऑपरेशन, रिलेशन लोडिंग (eager/lazy), बिल्ट-इन स्कीमा वैलिडेटर और मौजूदा डेटाबेस से एंटिटी जनरेटर। Mikro-ORM जटिल डोमेन मॉडल और माइक्रोसर्विस आर्किटेक्चर के लिए आदर्श है जहां डेटा स्थिरता महत्वपूर्ण है।
2. इंस्टॉलेशन
Mikro-ORM और आवश्यक डेटाबेस ड्राइवर को इंस्टॉल करने के लिए npm (या yarn/pnpm) के माध्यम से निम्न कमांड चलाएँ:
# कोर लाइब्रेरी इंस्टॉल करें
npm install @mikro-orm/core
# अपने DB के लिए ड्राइवर इंस्टॉल करें (एक चुनें):
npm install @mikro-orm/sqlite # SQLite
npm install @mikro-orm/postgresql # PostgreSQL
npm install @mikro-orm/mysql # MySQL / MariaDB
npm install @mikro-orm/mongodb # MongoDB
# अतिरिक्त: माइग्रेशन और स्कीमा जनरेशन के लिए CLI
npm install @mikro-orm/cli
npm install @mikro-orm/migrations # माइग्रेशन के लिए
डेकोरेटर के काम करने के लिए reflect-metadata इंस्टॉल करने की भी सलाह दी जाती है:
npm install reflect-metadata
tsconfig.json में यह जोड़ें:
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"target": "ES2021",
"module": "commonjs"
}
}
3. त्वरित शुरुआत — न्यूनतम कार्यशील उदाहरण
SQLite पर एक सरल एप्लिकेशन बनाते हैं जिसमें एक User एंटिटी होगी।
चरण 1. एंटिटी परिभाषित करें (entities/User.ts):
import { Entity, PrimaryKey, Property } from '@mikro-orm/core';
@Entity()
export class User {
@PrimaryKey()
id!: number;
@Property()
name!: string;
@Property()
email!: string;
@Property()
createdAt: Date = new Date();
}
चरण 2. Mikro-ORM कॉन्फ़िगर करें (index.ts):
import 'reflect-metadata';
import { MikroORM } from '@mikro-orm/core';
import { SqliteDriver } from '@mikro-orm/sqlite';
import { User } from './entities/User';
async function main() {
const orm = await MikroORM.init({
entities: [User],
dbName: 'test.db',
driver: SqliteDriver,
debug: true, // SQL क्वेरी लॉग करें
});
// स्कीमा बनाएं (डेवलपमेंट मोड में)
await orm.getSchemaGenerator().createSchema();
// EntityManager प्राप्त करें
const em = orm.em.fork();
// यूज़र बनाएं
const user = em.create(User, {
name: 'राहुल',
email: 'rahul@example.com',
});
await em.flush(); // DB में सेव करें
// यूज़र पढ़ें
const found = await em.findOne(User, { email: 'rahul@example.com' });
console.log('मिला:', found);
// अपडेट करें
found!.name = 'अमित';