TechSolution

Programing tutorial

Membuat Prisma ORM dengan Mysql dan Typescript

TypescriptTypescript

Apa Itu Prisma?

Prisma adalah sebuah Object-Relational Mapping (ORM) yang digunakan untuk menghubungkan aplikasi dengan database. ORM adalah paradigma yang memungkinkan pengembang untuk berinteraksi dengan database menggunakan objek dan metode daripada perlu menulis query SQL manual. Prisma dibangun untuk bahasa pemrograman JavaScript dan TypeScript, dan telah menjadi salah satu alat paling populer dalam ekosistem Node.js.

Keunggulan Prisma

  1. Kode yang Bersih dan Mudah Dikelola: Salah satu keunggulan utama Prisma adalah kemampuannya untuk menghasilkan kode yang bersih dan mudah dikelola. Dengan Prisma, pengembang dapat mendefinisikan model data mereka menggunakan bahasa pemrograman yang sudah dikenal, seperti TypeScript atau JavaScript. Ini memungkinkan pengembang untuk bekerja dalam lingkungan yang nyaman dan familiar.
  2. Type-Safety: Dalam aplikasi yang besar, deteksi kesalahan sejak dini sangat penting. Prisma memberikan keamanan tipe yang kuat, yang berarti kesalahan dalam kueri database dapat dideteksi saat kompilasi kode. Ini membantu menghindari kesalahan yang mahal dalam pengembangan.
  3. Migrasi Database yang Mudah: Prisma memiliki alat bawaan untuk mengelola dan menerapkan migrasi database. Ini sangat berguna ketika mengubah struktur database tanpa harus menghentikan aplikasi Anda. Pengembang dapat dengan mudah membuat perubahan dalam skema database mereka dan menerapkannya ke database tanpa banyak kerumitan.
  4. Dukungan untuk Berbagai Database: Prisma mendukung berbagai jenis database, termasuk PostgreSQL, MySQL, SQLite, dan SQL Server. Ini memungkinkan pengembang untuk bekerja dengan database yang paling sesuai dengan kebutuhan proyek mereka.
  5. Ekosistem yang Berkembang: Prisma memiliki komunitas yang besar dan aktif, sehingga pengembang dapat dengan mudah menemukan dukungan dan sumber daya tambahan seperti plugin dan ekstensi.

Membuat Projek dengan Prisma

Pertama, Sama seperti judul, Kita akan membuat sebuah projek simpel menggunakan Prisma ORM dengan typescript dan Mysql sebagai database nya:

  1. Buat sebuah folder projek dengan command berikut:
mkdir prisma-test
cd prisma-test

2. Jalankan command berikut untuk membuat init program kita

npm init -y

3. Install paket-paket yang dibutuhkan

npm install typescript ts-node @types/node --save-dev

4. Generate Konfigurasi file config Typescript

npx tsc --init

Saat perintah dijalankan maka akan membuat file tsconfig.json

5. Install Prisma orm

npm install prisma

6. Selanjutnya kita membuat generate configurasi database provider dan juga file environment nya.

npx prisma init --datasource-provider mysql

Saat kita menjalankan peritah diatas maka akan menggenerate folder prisma dan juga scheme nya didalam folder root. dan juga akan membuat sebuah file konfigurasi datasource file .env.  Setting file .env sesuai koneksi database yang kita inginkan. Contoh File konfigurasi seperti dibawah

DATABASE_URL=“mysql://attgroup:att123@localhost:3306/prisma_test”

7. Membuat Scheme Table untuk database kita

Edit file scheme.prisma dan tambahkan model User dan juga Post yang mendeskripsikan tabel kita didatabase

generator client {
  provider = "prisma-client-js"
}
datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}
model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
  phone String
  password String
  posts Post[]
}
model Post {
  id        Int     @id @default(autoincrement())
  title     String
  content   String?
  published Boolean @default(false)
  author    User    @relation(fields: [authorId], references: [id])
  authorId  Int
}

Setelah kita membuat scheme seperti diatas makan jalankan migrasi:

npx prisma migrate dev --name init

Maka akan membuat folder migration di folder prisma/migrations/nama_migrasi

Saat kita cek didatabase maka akan dibuatkan tabel dan migrasinya:

8. Mengelolah Table Database

Setelah kita membuat scheme sekarang kita mengolah tabel menggunakan prisma.

Pertama didalam root buatkan sebuah folder user yang didalamnya terdapat 2 file yaitu Create.ts dan juga file Get.ts.

Kedua file tersebut akan kita gunakan untuk insert data kedalam database dan juga menampilkanya.

  • Membuat Insert Data

Ubah file Create.ts seperti kode dibawah ini:

// users/Create.ts
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();

async function createNewUser() {
  const newUser = await prisma.user.create({
    data: {
      name: 'Rafles',
      email: 'Rafles@gmail.com',
      phone: '1234589',
      password:'123456789'
    },
  });
  console.log('Created new user:', newUser);
}

createNewUser().catch((error) => {
  console.error('Error creating user:', error);
});

Setelah file diatas dibuat, Lalu jalankan command untuk mengeksekusi kode program untuk create diatas:

npx ts-node users/Create.ts 

Saat menjalankan command diatas maka data akan masuk kedalam database. Edit dan ulangi dengan data yang berbeda lalu jalankan ulang Create.ts. Maka saat kita periksa kedalam database akan terdapat data yang kita jalankan tadi seperti gambar dibawah

  • Membuat Get Data

Edit file Get.ts dan masukkan kode berikut:

import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
  const users = await prisma.user.findMany()
  console.log(users)
}
main()
  .then(async () => {
    await prisma.$disconnect()
  })
  .catch(async (e) => {
    console.error(e)
    await prisma.$disconnect()
    process.exit(1)
  })

Simpan lalu jalankan perintah berikut untuk mengeksekusi.

npx ts-node users/Get.ts

Karena kita hanya menampilkan data didalam console saja, Maka akan Terlihat consol sebagai berikut.

Seperti itulah kita dalam membuat dan mengolah projek dengan Prisma ORM.

Sampai disini kita cuma membuat create dan get data users. Untuk membuat data Post bisa dengan mengikuti langkah-langkah diatas.

Terimakasih!

By raflesngln@gmail.com

Stay Hungry Stay Foolish

Leave a Reply

Your email address will not be published. Required fields are marked *