santisify Site

Back

ORM configuration(后续更新)Blur image

nestjs + Mikro-ORM(v7)#

当然首先是来安装

Installation#

pnpm add @mikro-orm/core @mikro-orm/nestjs @mikro-orm/mysql @mikro-orm/reflection
pnpm add tsx dotenv @mikro-orm/cli -D
bash

CLI Configuration#

.env.example

MIKRO_ORM_HOST=localhost
MIKRO_ORM_PORT=3306
MIKRO_ORM_USER=root
MIKRO_ORM_PASSWORD=123456
MIKRO_ORM_DB_NAME=demo
plaintext

mikro-orm.config.ts || src/mikro-orm.config.ts

Test CLI#

npx mikro-orm debug
bash

执行上述命令后会出现一些相关信息:

Database linkage#

在对应的entity文件中添加装饰器(主键:@PrimaryKey(), 其他:@Property()),可自动对字段进行类型推断,当然也可以自己设置(@Property({type:'text'})),例如:

以下代码为mikro-orm创建迁移计划,并非修改数据库.

npx mikro-orm migration:create
bash

执行后你会得到一个全新的文件夹:

./src/migrations/
├── Migration20260423123341.ts
└── .snapshot-nestdemo.json
plaintext

其中文件Migration20260423123341.ts, 数据库也会有相关的文件名记录,内容如下:

import { Migration } from '@mikro-orm/migrations';

export class Migration20260423123341 extends Migration {
  override up(): void | Promise<void> {
    this.addSql(
      `create table \`user\` (\`id\` int unsigned not null auto_increment primary key, \`username\` varchar(255) not null, \`email\` varchar(255) not null, \`password\` varchar(255) not null) default character set utf8mb4 engine = InnoDB;`,
    );
  }

  override down(): void | Promise<void> {
    this.addSql(`drop table if exists \`user\`;`);
  }
}
ts

TIPS:必记命令

npx mikro-orm migration:up  //迁移到最新版本,对应上方up函数
npx mikro-orm migration:down  //回退一个版本对应上方down函数
bash

sequelize + nodejs + mysql#

Installation#

npm install sequelize mysql2
npm install @dotencx/dotenvx
npm install sequelize-cli -D   //喜欢使用cli的安装 cli文档链接:https://sequelize.org/docs/v7/cli/
bash

Connection#

databaseHelper.js:

.env.example:

DB_NAME=nestdemo
DB_USER=root
DB_PASSWORD=123456
DB_HOST=localhost
DB_PORT=3306
plaintext

运行dotenvx run -- node databaseHelper.js测试连接是否成功。

成功会显示:

⟐ injected env (5) from .env
Executing (default): SELECT 1+1 AS result
Connection has been established successfully.
plaintext

否则会报错:

Unable to connect to the database: AccessDeniedError [SequelizeAccessDeniedError]: Access denied for user 'root'@'localhost' (using password: YES)
plaintext

Define model#

在测试文件中写入

import {User} from "./src/models/UserModel.js";

const users = await User.findAll();
console.log(users);
js

运行dotenvx run -- node test.js测试是否成功。 成功会显示:

⟐ injected env (5) from .env
Executing (default): SELECT `id`, `name`, `email`, `password` FROM `users` AS `User`;
[]
plaintext

如没有数据表或者数据库表名填错,会在报错中找到:

  parent: Error: Table 'nestdemo.users' doesn't exist
plaintext

详细CRUD操作参考sequelize文档

ORM configuration(后续更新)
https://santisify.top/blog/other/orm
Author santisify
Published at April 29, 2026
Comment seems to stuck. Try to refresh?✨