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