×

Cài đặt thư viện TypeORM trong JavaScript

TypeORM là một Object-Relational Mapper (ORM) mạnh mẽ được sử dụng rộng rãi trong việc tạo ra và quản lý cơ sở dữ liệu cho các ứng dụng JavaScript và TypeScript. Bài viết này sẽ hướng dẫn bạn cách cài đặt TypeORM trong một dự án JavaScript, từ việc tạo dự án mới, cài đặt các thư viện cần thiết, cấu hình, đến cách sử dụng các tính năng chính của TypeORM.

1. Giới thiệu về TypeORM

1.1 TypeORM là gì?

TypeORM là một ORM mã nguồn mở cho Node.js, được thiết kế để hoạt động với TypeScript và JavaScript. Nó hỗ trợ nhiều cơ sở dữ liệu khác nhau như MySQL, MariaDB, PostgreSQL, SQLite, và Microsoft SQL Server. TypeORM giúp cho việc tương tác với cơ sở dữ liệu trở nên dễ dàng hơn thông qua các đối tượng JavaScript, cho phép bạn viết mã cơ sở dữ liệu bằng cách sử dụng các mô hình, truy vấn ORM, và các công cụ di trú cơ sở dữ liệu (migrations).

1.2 Tại sao nên sử dụng TypeORM?

  • Đơn giản hóa việc quản lý cơ sở dữ liệu: TypeORM giúp giảm thiểu việc viết các câu lệnh SQL bằng cách cho phép bạn tương tác với cơ sở dữ liệu thông qua các đối tượng.
  • Hỗ trợ đa dạng cơ sở dữ liệu: TypeORM tương thích với nhiều loại cơ sở dữ liệu phổ biến, giúp bạn linh hoạt trong việc lựa chọn hệ quản trị cơ sở dữ liệu.
  • Tích hợp chặt chẽ với TypeScript: Đối với các dự án TypeScript, TypeORM cung cấp hỗ trợ typization mạnh mẽ, giúp phát hiện lỗi trước khi runtime.

2. Tạo dự án Node.js mới

Để bắt đầu, bạn cần tạo một dự án Node.js mới. Mở terminal và thực hiện các bước sau:

mkdir my-typeorm-project
cd my-typeorm-project
npm init -y

Lệnh npm init -y sẽ khởi tạo một file package.json với các thiết lập mặc định.

3. Cài đặt TypeORM và các thư viện cần thiết

3.1 Cài đặt TypeORM

Sử dụng npm để cài đặt TypeORM:

npm install typeorm reflect-metadata
  • typeorm: Thư viện chính của TypeORM.
  • reflect-metadata: Thư viện này cần thiết để TypeORM hoạt động đúng cách với decorators trong TypeScript.

3.2 Cài đặt driver cho cơ sở dữ liệu

TypeORM hỗ trợ nhiều cơ sở dữ liệu, bạn cần cài đặt driver cho cơ sở dữ liệu mà bạn sử dụng. Ví dụ, nếu bạn sử dụng MySQL, cài đặt thư viện mysql:

npm install mysql

Nếu bạn sử dụng PostgreSQL, cài đặt thư viện pg:

npm install pg

Tương tự, cài đặt driver cho các cơ sở dữ liệu khác nếu cần: mssql, sqlite3, mariadb, etc.

4. Cấu hình TypeORM

4.1 Tạo file cấu hình

TypeORM cần một file cấu hình để biết cách kết nối với cơ sở dữ liệu. Tạo một file tên là ormconfig.json trong thư mục gốc của dự án và thêm cấu hình như sau:

{
  "type": "mysql",
  "host": "localhost",
  "port": 3306,
  "username": "root",
  "password": "password",
  "database": "test",
  "synchronize": true,
  "logging": false,
  "entities": ["src/entity/**/*.js"],
  "migrations": ["src/migration/**/*.js"],
  "subscribers": ["src/subscriber/**/*.js"],
  "cli": {
    "entitiesDir": "src/entity",
    "migrationsDir": "src/migration",
    "subscribersDir": "src/subscriber"
  }
}

Chú ý: Bạn cần thay đổi các thông tin username, password, database, và entities phù hợp với cấu hình của bạn.

4.2 Tạo file index.js

Tạo một file index.js để khởi động ứng dụng với cấu hình TypeORM. Đoạn mã dưới đây khởi động kết nối cơ sở dữ liệu và in ra thông báo kết nối thành công:

require("reflect-metadata");
const { createConnection } = require("typeorm");

createConnection().then(async connection => {
    console.log("Connected to the database!");

    connection.close();

}).catch(error => console.log(error));

5. Tạo Entities với TypeORM

5.1 Entity là gì?

Entities là các lớp của đối tượng ánh xạ đến các bảng trong cơ sở dữ liệu. Đây là nơi bạn định nghĩa các cột, kiểu dữ liệu và các ràng buộc của bảng.

5.2 Tạo Entity cơ bản

Tạo một thư mục src/entity và thêm một file tên là User.js với nội dung:

const { Entity, PrimaryGeneratedColumn, Column } = require("typeorm");

@Entity()
class User {

    @PrimaryGeneratedColumn()
    id = undefined;

    @Column("text")
    name = "";
}

module.exports = User;

Trong entity mẫu này, @Entity() đánh dấu lớp User là một entity của TypeORM. @PrimaryGeneratedColumn() đánh dấu id là khóa chính tự động tăng và @Column("text") đánh dấu name là một cột kiểu dữ liệu text.

5.3 Sử dụng entity trong ứng dụng

Chỉnh sửa file index.js để sử dụng entity User:

require("reflect-metadata");
const { createConnection } = require("typeorm");
const User = require("./src/entity/User");

createConnection().then(async connection => {
    console.log("Connected to the database!");

    // Tạo một người dùng mới
    let user = new User();
    user.name = "John Doe";

    // Lưu người dùng vào cơ sở dữ liệu
    await connection.manager.save(user);
    console.log("User has been saved, user id is: ", user.id);

    // Lấy tất cả người dùng
    let users = await connection.manager.find(User);
    console.log("All users from the db: ", users);

    connection.close();
}).catch(error => console.log(error));

6. Migration trong TypeORM

6.1 Migration là gì?

Migration trong TypeORM là các tập lệnh dùng để thay đổi schema của cơ sở dữ liệu: tạo bảng, thay đổi bảng, xóa bảng, thêm cột, vv. Migration giúp quản lý thay đổi schema một cách dễ dàng và có kiểm soát.

6.2 Tạo Migration

Chạy lệnh sau để tạo migration:

npm run typeorm migration:create -- -n CreateUserTable

Nó sẽ tạo một tệp migration trong thư mục src/migration. Mở tệp vừa được tạo và thêm đoạn mã để định nghĩa các thay đổi schema:

const {MigrationInterface, QueryRunner} = require("typeorm");

module.exports = class CreateUserTable1620226805484 {

    async up(queryRunner) {
        await queryRunner.query("CREATE TABLE user (id INT AUTO_INCREMENT, name VARCHAR(255), PRIMARY KEY(id))");
    }

    async down(queryRunner) {
        await queryRunner.query("DROP TABLE user");
    }

}

6.3 Chạy Migration

Chạy lệnh sau để chạy các migrations:

npm run typeorm migration:run

7. Kết luận

Trong bài viết này, chúng ta đã tìm hiểu cách cài đặt và cấu hình thư viện TypeORM trong ứng dụng JavaScript. Chúng ta đã tạo một dự án mới, cài đặt các thư viện cần thiết, tạo các entity, và làm việc với migrations. Việc sử dụng TypeORM không chỉ giúp quản lý cơ sở dữ liệu một cách hiệu quả, mà còn giúp phát triển ứng dụng dễ dàng hơn với cấu trúc rõ ràng và các tính năng mạnh mẽ.

TypeORM thực sự là một công cụ mạnh mẽ khi bạn làm việc với cơ sở dữ liệu trong ứng dụng JavaScript hoặc TypeScript. Hãy thử áp dụng nó trong dự án của bạn và trải nghiệm những lợi ích mà nó mang lại. Chúc bạn thành công!

Comments