快速开始
TypeORM 是一个可以在 Node.js、浏览器、Cordova、Ionic、React Native、NativeScript、Expo 和 Electron 平台上运行的 ORM, 并且可用于 TypeScript 和 JavaScript (ES2021)。
它的目标是始终支持最新的 JavaScript 特性,并提供额外功能, 帮助你开发任何使用数据库的应用——从只有少数表的小型应用到具有多个数据库的大型企业应用。
TypeORM 支持的数据库比任何其他 JS/TS ORM 都多:Google Spanner、Microsoft SqlServer、MongoDB、MySQL/MariaDB、Oracle、Postgres、SAP HANA 和 SQLite,以及派生数据库和不同驱动。
TypeORM 支持 Active Record 和 Data Mapper 模式, 这与目前所有其他 JavaScript ORM 不同, 这意味着你可以以最高效的方式编写高质量、松耦合、可扩展、可维护的应用。
TypeORM 受到其他 ORM 的影响,如 Hibernate、 Doctrine 和 Entity Framework。
功能
- 同时支持 DataMapper 和 ActiveRecord(任选其一)。
- 实体和列。
- 数据库特定的列类型。
- 实体管理器。
- 仓库和自定义仓库。
- 干净的对象关系模型。
- 关联(关系)。
- 急切加载和延迟加载关系。
- 单向、双向和自引用关系。
- 支持多重继承模式。
- 级联操作。
- 索引。
- 事务。
- 支持自动生成的 迁移。
- 连接池。
- 复制。
- 使用多个数据库实例。
- 支持多种数据库类型。
- 跨数据库和跨 schema 查询。
- 优雅语法、灵活强大的查询构建器 (QueryBuilder)。
- 左连接和内连接。
- 支持基于连接的正确分页。
- 查询缓存。
- 流式原始结果。
- 日志记录。
- 监听器和订阅器(钩子)。
- 支持闭包表模式。
- 在模型中或单独配置文件中声明 schema。
- 支持 MySQL / MariaDB / Postgres / CockroachDB / SQLite / Microsoft SQL Server / Oracle / SAP Hana / sql.js。
- 支持 MongoDB NoSQL 数据库。
- 适用于 Node.js / 浏览器 / Ionic / Cordova / React Native / NativeScript / Expo / Electron 平台。
- 支持 TypeScript 和 JavaScript。
- 支持 ESM 和 CommonJS。
- 生成的代码高效、灵活、干净且易维护。
- 遵循所有最佳实践。
- CLI。
等等……
使用 TypeORM,你的模型看起来像这样:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number
@Column()
firstName: string
@Column()
lastName: string
@Column()
age: number
}
你的领域逻辑看起来像这样:
const userRepository = AppDataSource.getRepository(User)
const user = new User()
user.firstName = "Timber"
user.lastName = "Saw"
user.age = 25
await userRepository.save(user)
const allUsers = await userRepository.find()
const firstUser = await userRepository.findOneBy({
id: 1,
}) // 根据id查找
const timber = await userRepository.findOneBy({
firstName: "Timber",
lastName: "Saw",
}) // 根据firstName和lastName查找
await userRepository.remove(timber)
或者,如果你更喜欢使用 ActiveRecord 实现,也可以这样写:
import { Entity, PrimaryGeneratedColumn, Column, BaseEntity } from "typeorm"
@Entity()
export class User extends BaseEntity {
@PrimaryGeneratedColumn()
id: number
@Column()
firstName: string
@Column()
lastName: string
@Column()
age: number
}
对应的领域逻辑是:
const user = new User()
user.firstName = "Timber"
user.lastName = "Saw"
user.age = 25
await user.save()
const allUsers = await User.find()
const firstUser = await User.findOneBy({
id: 1,
})
const timber = await User.findOneBy({
firstName: "Timber",
lastName: "Saw",
})
await timber.remove()
安装
-
安装 npm 包:
npm install typeorm -
你需要安装
reflect-metadatashim:npm install reflect-metadata并在应用的全局地方(例如
app.ts)导入:import "reflect-metadata" -
你可能还需要安装 Node 类型定义:
npm install @types/node --save-dev