TypeORM
TypeORM 是一个适用于 TypeScript 和 JavaScript 的 ORM(对象关系映射)框架,支持多种数据库(如 MySQL、PostgreSQL、SQLite、MariaDB 等)。它通过定义实体类来与数据库交互,能够帮助你轻松进行数据库操作,包括增删改查(CRUD)。
下面是 TypeORM 的基本使用指南:
1. 安装 TypeORM 和数据库驱动
首先,你需要安装 TypeORM 和数据库的驱动程序。以 MySQL 为例:
bashnpm install typeorm mysql2
如果你使用的是 PostgreSQL,可以安装 pg 驱动:
bashnpm install typeorm pg
2. 创建 TypeORM 配置文件
在项目根目录下创建一个 ormconfig.json 或 data-source.ts 配置文件,来配置 TypeORM 连接数据库。
方式一:使用 ormconfig.json 文件
这是一个典型的 JSON 配置文件:
json{ "type": "mysql", // 或 "postgres" 等 "host": "localhost", "port": 3306, // MySQL 默认端口 "username": "root", "password": "password", "database": "test", "synchronize": true, // 如果你希望每次运行应用时自动同步数据库结构 "logging": true, "entities": [ "src/entity/**/*.ts" // 指定实体类文件的位置 ], "migrations": [ "src/migration/**/*.ts" ], "subscribers": [ "src/subscriber/**/*.ts" ] }
方式二:使用 TypeScript 配置 (data-source.ts)
tsimport { DataSource } from "typeorm"; import { User } from "./entity/User"; export const AppDataSource = new DataSource({ type: "mysql", // 或 "postgres" 等 host: "localhost", port: 3306, username: "root", password: "password", database: "test", synchronize: true, logging: true, entities: [ User ], migrations: [], subscribers: [] });
3. 定义实体类
在 TypeORM 中,你需要定义一个实体类来表示数据库中的表。每个实体类通常对应数据库中的一个表。
示例:定义一个 User 实体类
tsimport { Entity, PrimaryGeneratedColumn, Column } from "typeorm"; @Entity() // 定义数据库表 export class User { @PrimaryGeneratedColumn() // 主键,自动递增 id: number; @Column() // 普通列 name: string; @Column() // 普通列 email: string; }
@Entity()装饰器标记了该类是一个实体类。@PrimaryGeneratedColumn()装饰器表示这是主键,并且是自动生成的。@Column()装饰器表示该字段对应数据库中的一个列。
4. 连接数据库
在项目启动时,你需要连接到数据库,通常会在 index.ts 或 app.ts 中进行:
tsimport { AppDataSource } from "./data-source"; import { User } from "./entity/User"; async function start() { // 建立数据库连接 await AppDataSource.initialize(); // 创建一个新的 User 实体 const userRepository = AppDataSource.getRepository(User); const user = new User(); user.name = "John Doe"; user.email = "johndoe@example.com"; // 保存到数据库 await userRepository.save(user); console.log("User has been saved"); // 关闭连接 await AppDataSource.destroy(); } start().catch((error) => console.log(error));
AppDataSource.initialize()用于初始化数据库连接。AppDataSource.getRepository(User)获取User实体的 repository(仓库)来进行数据库操作。userRepository.save(user)保存实体到数据库。
5. 基本的 CRUD 操作
创建(Create)
tsconst user = new User(); user.name = "Jane Doe"; user.email = "janedoe@example.com"; await userRepository.save(user); ```### 查询(Read)#### 查询单个记录 ```ts const user = await userRepository.findOneBy({ id: 1 }); console.log(user);
查询多个记录
tsconst users = await userRepository.find(); console.log(users);
使用条件查询
tsconst users = await userRepository.find({ where: { name: "John Doe" }, }); console.log(users);
更新(Update)
tsconst user = await userRepository.findOneBy({ id: 1 }); if (user) { user.name = "Updated Name"; await userRepository.save(user); // save 会执行更新操作 }
删除(Delete)
tsconst user = await userRepository.findOneBy({ id: 1 }); if (user) { await userRepository.remove(user); // 删除操作 }
6. 同步数据库
如果你将 synchronize 配置为 true,每次启动应用时,TypeORM 会自动根据实体类生成数据库表结构,进行同步操作。
注意: 在生产环境中,通常不建议将 synchronize 设置为 true,因为它会自动修改数据库结构,可能会导致数据丢失。建议在开发环境中使用,并通过迁移(Migration)管理生产环境中的数据库结构。
7. 迁移(Migration)
如果你不想直接同步数据库结构,可以使用 TypeORM 的迁移工具来手动控制数据库结构的变更。
生成迁移文件
bashnpx typeorm migration:generate -n MigrationName ```### 运行迁移 ```bash npx typeorm migration:run ```### 撤销迁移 ```bash npx typeorm migration:revert ```## 总结 TypeORM 是一个强大的 ORM 框架,可以帮助你高效地与数据库交互。它提供了许多便利的功能,如自动同步数据库、自动生成迁移文件、强类型支持等,适用于 TypeScript 和 JavaScript 项目。通过配置数据库连接、定义实体类和使用 repository,你可以轻松实现常见的 CRUD 操作。
加载中...