在NestJS中使用mikro-orm的实现

 更新时间:2026年05月09日 10:22:28   作者:ZJY132  
本文主要介绍了在NestJS中使用mikro-orm,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

什么是ORM?

简单来说,ORM 是为了让开发者在 TypeScript / JavaScript 等语言中,用对象、类、方法的方式操作关系型数据库,减少直接编写 SQL 的需求,同时获得类型提示、实体关系管理、迁移等工程化能力。

MIKRORM

就在上个月,MIKRORM刚刚发布了7.0版本,这是一次重大的版本更新。这篇文章就介绍了,如何在NestJS中使用最新的MIKORM

使用过程

1.创建NestJS项目

这一步略过,详情可以参考之前的创建过程

2.安装

来到MIKRORM的官网,可以看到它提供了多种的数据库安装,以postgres为例: 执行命令 pnpm add @mikro-orm/core @mikro-orm/nestjs @mikro-orm/postgresql

3.导入配置文件

官网提供的方式是直接在AppModule中导入。

@Module({
  imports: [
    MikroOrmModule.forRoot({
      entities: ['./dist/entities'],
      entitiesTs: ['./src/entities'],
      dbName: 'my-db-name.sqlite3',
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

但是我认为这样的方式并不优雅,相当于把MikroOrm混杂在了AppModule中,并且这种配置方式只能作用在MIKRORM项目中,无法被Mikro-cli读取,因此我们这里采用单独创建MikroOrm配置文件的方式导入。
在根目录下创建mikro-orm.config.ts,同时写入:

import { defineConfig } from '@mikro-orm/postgresql';

export default defineConfig({
  dbName: 'sqlite.db',
  debug: true,
});

然后安装Mikro-cli工具,执行命令:pnpm add @mikro-orm/cli -D。为了检测我们的项目能否识别到MikroORM配置,使用命令npx mikro-orm debug
此时我们会发现,根本检测不到!!这是V7版本的一大更新!V7版本加载Typescript的工具不再是ts-node而是tsx。之前能检测到的原因是NestJS项目本身就自带了ts-node。因此我们再装一下tsx,执行命令pnpm add tsx
为什么要做这个转变呢?(坑后续再填,我现在也不知道)

4.修改配置文件

我们需要MikrORM可以自动识别实体类,因此加入

import { defineConfig } from '@mikro-orm/postgres';
export default defineConfig({
  entities: ['dist/**/*.entity.js'],
  entitiesTs: ['src/**/*.entity.ts'],
  // ...
});

5.建立数据库连接

V7无法自动的读取环境变量中的配置了,因此需要手动安装pnpm add dotenv -D,然后在配置文件中导入import 'dotenv/config'
接下来,在根路径下创建.env文件,文件内容如下

//根据自己的数据库名称等信息填写
DB_NAME=postgres
DB_USER=postgres
DB_PASSWORD=123456
DB_HOST=localhost
DB_PORT=5432

然后在配置文件中显示的声明:

import 'dotenv/config';
import { defineConfig } from '@mikro-orm/postgresql';
import { TsMorphMetadataProvider } from '@mikro-orm/reflection';
export default defineConfig({
  dbName: process.env.DB_NAME,
  password: process.env.DB_PASSWORD,
  port: Number(process.env.DB_PORT),
  host: process.env.DB_HOST,
  entities: ['dist/**/*.entity.js'],
  entitiesTs: ['src/**/*.entity.ts'],
  debug: true,
});

此时再次运行npx mikro-orm debug就会发现不仅能检测到我们的配置文件,还可以检测到实体类,并且数据库连接也是正常的

6.元数据反射配置

为啥需要它?TypeScript 有一个特性:在编译成 JavaScript 后,所有的类型信息都会消失。MikroORM 需要知道该在数据库建什么类型的字段,JS 原生是做不到的。 安装pnpm add @mikro-orm/reflection

7.实体类上的装饰器

原本V6,将entity和Mikr-ORM配合起来,只需要在对应字段加上装饰器即可。但是在V7版本中,需要引入包import { Entity, PrimaryKey, Property } from '@mikro-orm/decorators/legacy';

import { Entity, PrimaryKey, Property } from '@mikro-orm/decorators/legacy';
@Entity()
export class Todo {
  @PrimaryKey()
  id: number;
  @Property()
  title: string;
  @Property({ type: 'text' })
  content: string;
  @Property()
  isCompleted: boolean;
}

到此这篇关于在NestJS中使用mikro-orm的实现的文章就介绍到这了,更多相关NestJS使用mikro-orm内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

最新评论