typeorm:跨平台 ORM 工具,支持多数据库与 Active Record/Data Mapper 模式

TypeScript & JavaScript ORM for Node.js — supports PostgreSQL, MySQL, MariaDB, SQLite, SQL Server, Oracle, and more.

分支45Tags112
当前项目代码仓暂无内容

TypeORM 是一个 ORM,可运行于 Node.js、浏览器、Cordova、Ionic、React Native、NativeScript、Expo 和 Electron 等平台,并可配合 TypeScript 和 JavaScript(ES2023)使用。它的目标始终是支持最新的 JavaScript 特性,并提供更多辅助功能,帮助你开发任何类型的使用数据库的应用——从仅有几张表的小型应用,到使用多个数据库的大型企业级应用。

TypeORM 支持的数据库比其他任何 JS/TS ORM 都多:Google SpannerMicrosoft SqlServerMySQL/MariaDBMongoDBOraclePostgresSAP HANASQLite,以及衍生数据库和不同驱动程序。

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

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 时,你的模型将如下所示:

import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"

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

    @Column()
    firstName: string

    @Column()
    lastName: string

    @Column()
    age: number
}

而你的领域逻辑如下所示:

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 实现,也可以使用它:

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()

示例

以下是一些可供你克隆并快速上手的仓库:

扩展

以下是一些扩展,可简化 TypeORM 的使用,并帮助其与其他模块集成:

贡献指南

有关贡献的详细信息,请参见这里;开发环境的搭建方法,请参见这里

本项目的存在,离不开所有贡献者的支持:

赞助者

开源开发既艰难又耗时。如果您希望助力 TypeORM 的未来,可以成为赞助者,让我们核心团队将更多时间用于 TypeORM 的改进和新功能开发。

冠军赞助

成为冠军赞助者,并获得我们核心贡献者提供的高级技术支持。成为冠军赞助者

支持者

通过每月捐助支持 TypeORM 的开发。成为支持者

社区

加入我们的支持者社区,帮助 TypeORM 持续发展。成为社区支持者

赞助者

按您意愿进行一次性或定期赞助。成为赞助者

项目介绍

TypeORM 是一款适用于 JavaScript 和 TypeScript 的 ORM(对象关系映射)工具库,旨在帮助开发者利用 Node.js 对关系型数据库进行操作。它不仅提供了一种将 JavaScript 对象映射至关系型数据库的方法,还支持包括 MySQL、PostgreSQL、MariaDB、SQLite 在内的多种数据库系统。此外,该库还具备查询构建器和实体关系映射的功能。其主要特性包括:对 TypeScript 的支持、异步操作、迁移及种子数据功能的实现,以及复杂查询的处理能力。【此简介由AI生成】

定制我的领域
33836.64 K6.66 K访问 GitHub