TypeORM适用于TypeScript和JavaScript的ORM框架


TypeORM 是一个 ORM可以在 Node.js、浏览器、Cordova、Ionic、React Native、NativeScript、Expo 和 Electron 平台上运行,并且可以与 TypeScript 和 JavaScript (ES2021) 一起使用。它的目标是始终支持最新的 JavaScript 功能,并提供额外的功能,帮助您开发任何类型的数据库应用程序——从包含少量表的小型应用程序到包含多个数据库的大型企业应用程序。

TypeORM 支持的数据库比任何其他 JS/TS ORM 都要多:Google SpannerMicrosoft SqlServerMySQL/MariaDBMongoDBOraclePostgresSAP HANASQLite,并且我们还衍生了数据库和不同的驱动程序。

与目前所有其他 JavaScript ORM 不同,TypeORM 同时支持 Active RecordData Mapper 模式,这意味着您可以以最高效的方式编写高质量、松耦合、可扩展且易于维护的应用程序。

TypeORM 深受其他 ORM 的影响,例如 HibernateDoctrineEntity Framework

功能

  • 同时支持 DataMapperActiveRecord(您可自行选择)。
  • 实体和列。
  • 数据库特定的列类型。
  • 实体管理器。
  • 存储库和自定义存储库。
  • 简洁的对象关系模型。
  • 关联(关系)。
  • 积极和消极关系。
  • 单向、双向和自引用关系。
  • 支持多种继承模式。
  • 级联。
  • 索引。
  • 事务。
  • 迁移和自动迁移生成。
  • 连接池。
  • 复制。
  • 使用多个数据库实例。
  • 处理多种数据库类型。
  • 跨数据库和跨模式查询。
  • 语法优雅、灵活且功能强大的 QueryBuilder。
  • 左连接和内连接。
  • 使用连接查询的正确分页。
  • 查询缓存。
  • 流式传输原始结果。
  • 日志记录。
  • 监听器和订阅者(​​钩子)。
  • 支持闭包表模式。
  • 在模型或单独的配置文件中声明模式。
  • 支持 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,您的模型如下所示:

typescript 复制代码
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"

@Entity()
export class User {
    @PrimaryGeneratedColumn()
    id: number

    @Column()
    firstName: string

    @Column()
    lastName: string

    @Column()
    age: number
}

您的域逻辑如下所示:

typescript 复制代码
const userRepository = MyDataSource.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,
}) // find by id
const timber = await userRepository.findOneBy({
    firstName: "Timber",
    lastName: "Saw",
}) // find by firstName and lastName

await userRepository.remove(timber)

或者,如果您更喜欢使用“ActiveRecord”实现,您也可以使用它:

typescript 复制代码
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
}

您的域逻辑将如下所示:

typescript 复制代码
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()

示例

请查看 sample 中的示例,了解使用方法。

您可以克隆以下几个代码库并开始使用:

扩展

有一些扩展可以简化 TypeORM 的使用以及将其与其他模块集成:

关于项目

TypeORM 适用于 TypeScript 和 JavaScript 的 ORM。支持 MySQL、PostgreSQL、MariaDB、SQLite、MS SQL Server、Oracle、SAP Hana 和 WebSQL 数据库。适用于 NodeJS、浏览器、Ionic、Cordova 和 Electron 平台。
MIT
Typescript
35,874
6444
343
2016-02-29
2025-10-06

增长趋势 - stars