本文档全面概述了 NestJS 中可用的数据库集成选项。它解释了如何使用官方支持的库和适配器将 NestJS 应用程序连接到各种数据库。NestJS 通过专门的包为多种数据库技术提供了头等支持,这些包与 NestJS 的依赖注入系统无缝集成。
NestJS 通过各种对象关系映射器 (ORM) 和对象文档映射器 (ODM) 支持 SQL 和 NoSQL 数据库。本文涵盖了主要的集成方法,即 TypeORM、Sequelize 和 Mongoose。有关数据库与 GraphQL 集成的更多信息,请参阅 GraphQL。
来源:package.json
来源:sample/05-sql-typeorm/package.json、sample/06-mongoose/package.json、sample/07-sequelize/package.json、sample/13-mongo-typeorm/package.json
TypeORM 是一个高度灵活的 ORM,支持传统的 SQL 数据库和 MongoDB。NestJS 提供了专门的 @nestjs/typeorm 包,将 TypeORM 集成到 NestJS 的依赖注入系统中。
要在 NestJS 应用程序中使用 TypeORM,您需要安装所需的包
npm install @nestjs/typeorm typeorm
您还需要安装相应的数据库驱动程序包
npm install mysql2 # for MySQL/MariaDB
# or
npm install pg # for PostgreSQL
# or
npm install sqlite3 # for SQLite
# or
npm install mongodb # for MongoDB
TypeORM 通常在根应用程序模块级别使用 TypeOrmModule.forRoot() 方法进行集成
TypeORM 集成支持存储库模式,其中每个实体都有一个相应的存储库来处理数据库操作。
来源:sample/05-sql-typeorm/package.json、sample/13-mongo-typeorm/package.json
Sequelize 是一个基于 Promise 的 Node.js ORM,用于 SQL 数据库。NestJS 提供了专门的 @nestjs/sequelize 包,用于将 Sequelize 集成到您的应用程序中。
要在 NestJS 应用程序中使用 Sequelize,您需要安装所需的包
npm install @nestjs/sequelize sequelize sequelize-typescript
您还需要安装数据库驱动程序
npm install mysql2 # for MySQL/MariaDB
# or
npm install pg # for PostgreSQL
# or
npm install sqlite3 # for SQLite
Sequelize 使用 SequelizeModule.forRoot() 方法进行集成
Sequelize 使用模型来表示数据库表,并支持定义它们之间的关联。
来源:sample/07-sequelize/package.json
Mongoose 是 MongoDB 的对象文档映射器 (ODM)。NestJS 提供了专门的 @nestjs/mongoose 包用于 Mongoose 集成。
要在 NestJS 应用程序中使用 Mongoose,您需要安装所需的包
npm install @nestjs/mongoose mongoose
Mongoose 使用 MongooseModule.forRoot() 方法进行集成
Mongoose 使用模式来定义文档的结构,并使用模型与数据库集合进行交互。
来源:sample/06-mongoose/package.json、sample/14-mongoose-base/package.json
来源:sample/05-sql-typeorm/package.json、sample/06-mongoose/package.json、sample/07-sequelize/package.json
| 功能 | TypeORM | Sequelize | Mongoose |
|---|---|---|---|
| 类型 | ORM | ORM | ODM |
| 支持的数据库 | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL, Oracle, MongoDB | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL | MongoDB |
| NestJS 包 | @nestjs/typeorm | @nestjs/sequelize | @nestjs/mongoose |
| 实体定义 | 带装饰器的类 | 带装饰器的类 | 带装饰器的模式接口 |
| 查询语言 | QueryBuilder, Find Options | Sequelize 查询接口 | Mongoose 查询 API |
| 关系支持 | 一对一、一对多、多对多 | 一对一、一对多、多对多 | References, Populate |
| 事务支持 | 是 | 是 | 是(有例外) |
| 迁移支持 | 是 | 是 | 否 |
| TypeScript 支持 | 原生 | 通过 sequelize-typescript | 通过 @types/mongoose |
来源:package.json、sample/05-sql-typeorm/package.json、sample/06-mongoose/package.json、sample/07-sequelize/package.json
TypeORM 是功能最丰富的 ORM 集成,支持 SQL 数据库和 MongoDB。
通过导入 TypeOrmModule 并使用配置对象调用其 forRoot() 方法来建立连接
TypeORM 利用存储库模式,该模式允许在数据访问逻辑和业务逻辑之间进行清晰的隔离。
来源:sample/05-sql-typeorm/package.json、sample/13-mongo-typeorm/package.json
Sequelize 为 SQL 数据库提供了强大的功能,支持事务和迁移。
通过导入 SequelizeModule 并调用其 forRoot() 方法来建立连接
NestJS 中的 Sequelize 大量使用装饰器来定义模型及其属性。
来源:sample/07-sequelize/package.json
Mongoose 专门用于 MongoDB 集成,提供模式验证、中间件和填充功能。
使用 MongooseModule.forRoot() 建立连接
Mongoose 需要模式定义来定义集合中文档的结构。
来源:sample/06-mongoose/package.json、sample/14-mongoose-base/package.json
存储库模式是一种常用的设计模式,用于将数据访问层与业务逻辑抽象化
工作单元模式用于维护受业务事务影响的对象列表
所有支持的 ORM 都提供事务支持以确保数据的一致性
来源:package.json、sample/05-sql-typeorm/package.json、sample/06-mongoose/package.json、sample/07-sequelize/package.json
NestJS 支持将数据库访问与 GraphQL 解析器结合使用,以创建高效的 API
有关 GraphQL 集成的更多详细信息,请参阅专门的 GraphQL 页面。
来源:sample/22-graphql-prisma/package.json、sample/12-graphql-schema-first/package.json、sample/23-graphql-code-first/package.json
来源:package.json、sample/05-sql-typeorm/package.json、sample/06-mongoose/package.json、sample/07-sequelize/package.json
NestJS 提供了用于测试数据库交互的实用工具,包括模拟存储库和数据库连接的能力,或者使用内存数据库进行测试。
来源:package.json