1. TypeORM là gì?
TypeORM là một ORM (Object-Relational Mapping) dành cho TypeScript và JavaScript, giúp thao tác với cơ sở dữ liệu dễ dàng hơn. Nó hỗ trợ nhiều hệ quản trị CSDL như:
• MySQL/MariaDB
• PostgreSQL
• SQLite
• MongoDB
• SQL Server
TypeORM giúp chúng ta thao tác với CSDL bằng cách sử dụng các class và decorator, giúp mã nguồn trở nên rõ ràng và dễ quản lý hơn.
2. Lợi ích khi sử dụng TypeORM
• Hỗ trợ TypeScript: Giúp tận dụng tính năng kiểm tra kiểu tĩnh.
• Làm việc với CSDL dễ dàng hơn: Thay vì viết SQL thuần, bạn chỉ cần sử dụng các entity và query builder.
• Hỗ trợ nhiều hệ quản trị CSDL: Dễ dàng chuyển đổi giữa các hệ quản trị.
• Migration tiện lợi: Giúp quản lý version của database một cách chuyên nghiệp.
3. Cài đặt TypeORM trong React Native
React Native thường sử dụng SQLite để lưu trữ dữ liệu cục bộ. Chúng ta sẽ sử dụng TypeORM kết hợp với SQLite.
Bước 1: Cài đặt các thư viện cần thiết
npm install typeorm reflect-metadata react-native-sqlite-storage
Thêm "emitDecoratorMetadata": true và "experimentalDecorators": true vào tsconfig.json để hỗ trợ decorator.
4. Ví dụ sử dụng TypeORM trong React Native
Bước 1: Tạo Entity (Bảng)
Tạo một file User.ts trong thư mục entities/
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
email: string;
}
Bước 2: Thiết lập kết nối với SQLite
Tạo file database.ts
import "reflect-metadata";
import { DataSource } from "typeorm";
import { User } from "./entities/User";
export const AppDataSource = new DataSource({
type: "react-native",
database: "app.db",
location: "default",
entities: [User],
synchronize: true,
driver: require("react-native-sqlite-storage"),
});
Bước 3: Sử dụng TypeORM để lưu và lấy dữ liệu
Tạo file userService.ts để thao tác với database:
import { AppDataSource } from "./database";
import { User } from "./entities/User";
export const saveUser = async (name: string, email: string) => {
const userRepository = AppDataSource.getRepository(User);
const user = new User();
user.name = name;
user.email = email;
await userRepository.save(user);
console.log("User saved:", user);
};
export const getUsers = async () => {
const userRepository = AppDataSource.getRepository(User);
return await userRepository.find();
};
Bước 4: Sử dụng trong React Native Component
import React, { useEffect, useState } from "react";
import { View, Text, Button } from "react-native";
import { AppDataSource } from "./database";
import { saveUser, getUsers } from "./userService";
const App = () => {
const [users, setUsers] = useState([]);
useEffect(() => {
AppDataSource.initialize()
.then(() => console.log("Database Initialized"))
.catch((err) => console.error("Error during Database Initialization:", err));
}, []);
const handleSaveUser = async () => {
await saveUser("John Doe", "[email protected]");
const users = await getUsers();
setUsers(users);
};
return (
<View>
<Button title="Add User" onPress={handleSaveUser} />
{users.map((user) => (
<Text key={user.id}>{user.name} - {user.email}</Text>
))}
</View>
);
};
export default App;
5. Tóm tắt
• TypeORM giúp làm việc với CSDL dễ dàng bằng cách sử dụng class và decorator thay vì SQL thuần.
• React Native sử dụng SQLite, có thể kết hợp với TypeORM để lưu trữ dữ liệu cục bộ.
• Cấu hình TypeORM với SQLite bằng cách dùng typeorm và react-native-sqlite-storage.
• Tạo Entity, kết nối database và thao tác CRUD dễ dàng với TypeORM.
TypeORM giúp code sạch hơn, dễ bảo trì và tối ưu cho cả dự án nhỏ và lớn. 🚀