Object-Relational Mapper (ORM) adalah library yang mengimplementasikan teknik pemetaan Object-Relational. Ini memungkinkan Anda menulis kueri database SQL menggunakan paradigma berorientasi objek dari bahasa pilihan Anda.
TypeORM adalah TypeScript ORM yang membuat antarmuka dengan berbagai database menjadi sangat mudah. Ia bekerja dengan database SQL tetapi juga berinteraksi dengan baik dengan database NoSQL seperti MongoDB.
NestJS menyediakan dukungan tingkat tinggi untuk TypeORM secara langsung. Paket TypeORM khusus membuat integrasi relatif mudah.
Langkah 1: Menginstal Dependensi
Sebelum menggunakan TypeORM dalam aplikasi NestJS, Anda harus menginstalnya dengan paket NestJS asli dan database SQL pilihan Anda. SQLite adalah opsi sederhana dan bebas instalasi.
Jalankan perintah berikut untuk menginstal TypeORM dan paket NestJS aslinya, menggunakan manajer paket npm:
instal npm @nestjs/typeorm typeorm
Jalankan perintah berikut untuk menginstal SQLite:
npm Install sqlite3
Langkah 2: Membuat Entitas
Entitas adalah kumpulan bidang yang mendefinisikan data yang disimpan dalam database. TypeORM menggunakan file entitas untuk membuat tabel di database Anda.
Ikuti langkah-langkah di bawah ini untuk membuat entitas:
- Buat file di modul aplikasi Anda dan beri nama mengikuti konvensi penamaan NestJS (
.entitas.ts ). - Di file entitas Anda, impor file Kesatuan, Kolom, dan Kolom Utama yang Dihasilkan dekorator dari typeorm.
- Di file entitas Anda, buat dan ekspor kelas.
- Isi kelas dengan nilai yang Anda inginkan di database Anda, seperti Indo, nama, dll.
- Beri anotasi pada kelas entitas Anda dengan dekorator Entitas. Ini membuat kelas Anda dikenali oleh TypeORM sebagai entitas.
- Beri anotasi pada properti id Anda dengan dekorator PrimaryGeneratedColumn. Ini memberitahu TypeORM untuk menandai Indo sebagai kunci utama dan menaikkannya secara otomatis.
- Beri anotasi pada properti yang tersisa dengan dekorator Kolom. Ini menambahkannya sebagai kolom di database Anda.
Sebagai contoh:
// src/test/test.entity.ts
impor { Entitas, Kolom, PrimaryGeneratedColumn } dari 'ketik';@Kesatuan()
eksporkelasUji{
@PrimaryGeneratedColumn()
nomor ID;@Kolom()
properti_1: string;@Kolom()
properti_2: string;
@Kolom()
properti_3: string;
}
File entitas di atas membuat tabel ini di database Anda:
uji | ||
---|---|---|
Indo | int (11) | KUNCI UTAMA AUTO_INCREMENT |
properti_1 | varchar (255) | |
properti_2 | varchar (255) | |
properti_3 | varchar (255) |
Itu Dokumentasi TypeORM mencakup entitas secara lebih rinci.
Langkah 3: Menghubungkan Aplikasi Anda ke Database
Sekarang setelah entitas Anda disiapkan, Anda harus menghubungkan aplikasi Anda ke database. Contoh ini menggunakan SQLite.
Ikuti langkah-langkah di bawah ini untuk menghubungkan aplikasi Anda ke database:
- Di modul root aplikasi Anda (Biasanya app.module.ts file), impor TypeOrmModul dari @nestjs/typeorm.
- Dalam file yang sama, impor semua entitas Anda.
- Dalam impor array, panggil untuk Root metode pada TypeOrmModule. Metode forRoot membagikan koneksi database melalui semua modul di aplikasi Anda.
- Lewati objek kosong sebagai argumen ke dalam metode forRoot; ini akan menjadi objek konfigurasi TypeORM.
- Tambahkan properti, Tipe, ke objek konfigurasi dan atur ke “sqlite”. Properti type menunjukkan nama database yang Anda gunakan.
- Tambahkan properti lain, basis data, ke objek konfigurasi dan atur ke “tes.db”. Properti database menunjukkan nama pilihan Anda untuk database Anda.
- Tambahkan properti lain, entitas, ke objek konfigurasi dan atur ke array kosong. Isi larik kosong dengan entitas yang Anda impor sebelumnya.
- Tambahkan properti lain, menyinkronkan, dan atur BENAR; properti ini menyinkronkan entitas Anda ke database Anda dan memperbaruinya setiap kali Anda menjalankan kode. Anda hanya harus menyetel properti ini ke BENAR dalam pengembangan. Selama produksi, Anda harus mengaturnya ke Salah untuk menghindari kehilangan data.
// src/app.module.ts
impor { Modul } dari '@nestjs/umum';
impor { TypeOrmModule } dari '@nestjs/typeorm';
impor { Uji } dari './test/test.entity';
impor { Entitas2 } dari './entitas/entitas.entitas';
impor { TestModule } dari './test/test.module';
@Modul({
impor: [
TypeOrmModul.forRoot({
Tipe: 'sqlite',
basis data: 'tes.db',
entitas: [Uji, Entitas2],
sinkronisasi: BENAR, //pengembangan saja
}),
modul tes,
],
pengontrol: [],
penyedia: [],
})
eksporkelasModul Aplikasi{}
Langkah 4: Membuat Repositori
Repositori adalah lapisan akses entitas yang digunakan untuk membuat kueri (menyisipkan, menghapus, menyimpan, menemukan, dll.) pada tabel yang dibuat oleh entitas dalam database. TypeORM mendukung pola desain repositori, dengan demikian, setiap entitas memiliki repositori sendiri.
TypeORM secara otomatis membuat repositori untuk entitas Anda ketika Anda mengikuti langkah-langkah di bawah ini:
- Di file modul entitas Anda, impor TypeOrmModul dari @nestjs/typeorm dan impor entitas Anda.
- Buat sebuah impor array di @Modul penghias.
- Dalam larik impor, panggil perintah untukFitur metode pada TypeOrmModule.
- Berikan array sebagai argumen ke dalam Anda dan isi array dengan entitas Anda.
// src/test/test.module.ts
impor { Modul } dari '@nestjs/umum';
impor { TypeOrmModule } dari '@nestjs/typeorm';
impor { Pengontrol Tes } dari './test.controller';
impor { Layanan Uji } dari './test.service';
impor { Uji } dari './test.entity';
@Modul({
impor: [TypeOrmModule.forFeature([Test])],
penyedia: [Layanan Uji],
pengontrol: [Pengendali Tes],
})
Langkah 5: Menyuntikkan Repositori Anda ke Layanannya Menggunakan Injeksi Ketergantungan
Dependency injection adalah salah satu teknik rekayasa perangkat lunak yang merupakan bentuk dari inversi prinsip kontrol. Ini menggeser beban manajemen ketergantungan dari kode klien ke perpustakaan atau layanan yang menjadi sandarannya.
Ikuti langkah-langkah di bawah ini untuk menyuntikkan repositori Anda ke dalam layanan:
- Di file layanan Anda, impor Gudang dari typeorm dan InjectRepository dekorator dari @nestjs/typeorm. Juga impor entitas yang ingin Anda masukkan repositorinya.
- Di kelas layanan Anda, buat konstruktor.
- Nyatakan pribadi variabel, repo, sebagai parameter dalam konstruktor untuk menginisialisasinya.
- Tetapkan jenis Repositori ke repo dengan tipe generik entitas Anda.
- Beri anotasi repo dengan dekorator InjectRepository dan berikan entitas Anda sebagai argumen.
// tes.layanan.ts
impor { Suntik } dari '@nestjs/umum';
impor { Repositori } dari 'ketik';
impor { InjectRepository } dari '@nestjs/typeorm';
impor { Uji } dari './test.entity';
@suntik()
eksporkelasLayanan Uji{
konstruktor(
@InjectRepository(Uji)
repo pribadi: Repositori<Uji>,
) {}
}
Sekarang setelah penyiapan Anda selesai, Anda dapat membuatnya kueri SQL di atasnya untuk mengambil atau mengubah data.
Membuat Query SQL dengan TypeORM
Anda dapat membuat kueri SQL sederhana dengan memanggil metode repositori TypeORM di repo variabel di dalam kelas layanan Anda. Anda juga dapat membuat kueri SQL kompleks dengan menggunakan pembuat kueri TypeORM.