Mikro-ORM 使用教程
项目介绍
Mikro-ORM 是一个基于 TypeScript 的 Node.js ORM 框架,它采用了数据映射器、工作单元和标识映射模式。Mikro-ORM 支持多种数据库,包括 MongoDB、MySQL、MariaDB、MS SQL Server、PostgreSQL 和 SQLite/libSQL。该框架提供了清晰的实体定义、实体构造器、关系建模、集合、工作单元、事务、级联持久化和删除、复合和外键作为主键、过滤器、查询构建器、深度嵌套结构的预加载、属性验证和生命周期钩子等功能。
项目快速启动
安装
首先,你需要安装 Mikro-ORM 及其对应的数据库驱动。以下是一些常见的安装命令:
# 对于 MongoDB
npm install @mikro-orm/core @mikro-orm/mongodb
# 对于 MySQL(也适用于 MariaDB)
npm install @mikro-orm/core @mikro-orm/mysql
# 对于 PostgreSQL(也适用于 CockroachDB)
npm install @mikro-orm/core @mikro-orm/postgresql
# 对于 SQLite
npm install @mikro-orm/core @mikro-orm/sqlite
配置
创建一个 mikro-orm.config.ts
文件来配置你的 ORM:
import { Options } from '@mikro-orm/core';
import { MongoDriver } from '@mikro-orm/mongodb';
const config: Options = {
entities: ['./dist/entities'], // 实体文件路径
dbName: 'my-db-name',
type: 'mongo',
clientUrl: 'mongodb://localhost:27017',
};
export default config;
初始化
在你的应用入口文件中初始化 Mikro-ORM:
import { MikroORM } from '@mikro-orm/core';
import config from './mikro-orm.config';
(async () => {
const orm = await MikroORM.init(config);
console.log(orm.em); // 输出 EntityManager 实例
})();
应用案例和最佳实践
实体定义
定义一个简单的实体:
import { Entity, PrimaryKey, Property } from '@mikro-orm/core';
@Entity()
export class User {
@PrimaryKey()
id!: number;
@Property()
createdAt: Date = new Date();
@Property({ onUpdate: () => new Date() })
updatedAt: Date = new Date();
@Property()
name!: string;
}
关系建模
定义一个带有关系的实体:
import { Entity, PrimaryKey, Property, ManyToOne } from '@mikro-orm/core';
import { User } from './User';
@Entity()
export class Book {
@PrimaryKey()
id!: number;
@Property()
title!: string;
@ManyToOne(() => User)
author!: User;
}
查询
使用查询构建器进行查询:
const books = await orm.em.find(Book, {}, { populate: ['author'] });
console.log(books);
典型生态项目
Mikro-ORM 可以与多种流行的框架和库集成,以下是一些典型的生态项目示例:
- Express + MongoDB: 使用 Mikro-ORM 与 Express 框架和 MongoDB 数据库集成。
- Nest + MySQL: 使用 Mikro-ORM 与 NestJS 框架和 MySQL 数据库集成。
- RealWorld 示例应用: 一个使用 NestJS 和 MySQL 的 RealWorld 示例应用。
- Koa + SQLite: 使用 Mikro-ORM 与 Koa 框架和 SQLite 数据库集成。
- GraphQL + PostgreSQL: 使用 Mikro-ORM 与 GraphQL 和 PostgreSQL 数据库集成。
- NextJS + MongoDB: 使用 Mikro-ORM 与 Next.js 框架和 MongoDB 数据库集成。
这些示例展示了 Mikro-ORM 在不同场景下的灵活性和强大功能。