@yunflyjs/yunfly-plugin-prisma v0.0.1
@yunke/yunfly-plugin-prisma
- 新一代 orm 工具
安装
- 安装依赖
yarn add @yunke/yunfly-plugin-prisma- 申明插件
// `src/config/config.plugin.ts` 中申明插件
const plugins: {[key:string]: string}[] = [
{
name: 'prisma',
package: '@yunke/yunfly-plugin-prisma'
}
];
export default plugins;- 启用插件
// `src/config/config.default.ts` 中启用插件。
config.prisma = {
enable: true,
db: {
url: 'mysql://user:password@localhost:3306/mydb'
}
};备注: 确保数据库能连接上且 mydb 数据库已经创建。
config.prisma 配置: 详细说明
- 初始化 prisma
npx prisma init --url 'mysql://user:password@localhost:3306/mydb'备注:这个命令创建了一个名为
prisma的新目录,其中包含一个名为schema.prisma的文件和一个位于项目根目录中的.env文件schema.prisma包含prisma模式以及数据库连接和prisma客户端生成器。
- 统一初始化配置
npx prisma init --dev备注:
prisma-init 指令说明 参考地址。 这个命令会更新
.env和schema.prisma文件, 保持配置的一致性。支持apollo管理配置。
- 创建第一个 module
schema.prisma 文件中创建第一个 User module
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
// User module
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
}- 生成
Prisma Client类型文件
- 生成
npx prisma generate- 重要提示:
- 第一次初始化时,
schema.prisma中需要有models配置。- 每次对
Prisma schema进行更改后,你都需要重新运行命令prisma generate去更新生成的Prisma Client代码。
- module 同步到数据库表中
npx prisma migrate dev --name=init使用
在 Service 中使用 prisma 进行数据的增删改查
import { prisma, Prisma } from '@yunke/yunfly-plugin-prisma';
@Service()
export default class UserService {
async createUser () {
const data: Prisma.UserCreateArgs = {
name: 'Alice',
email: 'alice@prisma.io',
}
const newUser = await prisma.user.create({
data,
});
return newUser;
}
async getUserList () {
const users = await prisma.user.findMany();
return users;
}
}提示:
prisma包含所有自定义modules的Typescript类型提示, 若VS CODE中没有类型提示时,可直接打开一次node_modules/.prisma/index.d.ts文件即可
config.prisma 配置说明
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| enable | boolean | 是 | 是否开启插件 |
| db | DbConfig | ((apolloConfig: ApolloConfig) => DbConfig) | 否 | 数据库配置 |
| client | Object | 否 | prisma client 客户端配置项 |
db 配置说明
// interface 类型
interface PrismaConfig {
db?: DbConfig | ((apolloConfig: ApolloConfig) => DbConfig);
...
}
interface DbConfig {
url: string;
databaseUrlKey?: string;
}- url: 连接数据库
url地址,详细请参考:https://prisma.yoga/concepts/database-connectors/mysql#%E8%BF%9E%E6%8E%A5-url - databaseUrlKey: 数据库环境变量名称,默认值为:
DATABASE_URL
使用 Apollo
config.prisma 支持 apollo 配置:
- 案例一
// 案例
config.prisma = {
enable: true,
db: `${apolloConfig['PRISMA-PROVIDER']}://${apolloConfig['PRISMA-USER']}:${apolloConfig['PRISMA-PASSWORD']}@${apolloConfig['PRISMA-HOST']}:${apolloConfig['PRISMA-PORT']}/${apolloConfig['PRISMA-DATABASE']}`
}- 案例二
为了提供更灵活的配置,db 参数支持函数模式,自己定制化函数内部逻辑。
config.prisma = {
enable: true,
db: (apolloConfig: ApolloConfig) => {
return {
url: `${apolloConfig['PRISMA-PROVIDER']}://` +
`${apolloConfig['PRISMA-USER']}:` +
`${apolloConfig['PRISMA-PASSWORD']}@` +
`${apolloConfig['PRISMA-HOST']}:` +
`${apolloConfig['PRISMA-PORT']}/` +
`${apolloConfig['PRISMA-DATABASE']}`
}
}
}config.client 配置说明
- interface 类型说明
interface PrismaConfig {
......
client?: {
datasources?: Datasources;
log?: Array<LogLevel | LogDefinition>;
errorFormat?: ErrorFormat;
rejectOnNotFound?: RejectOnNotFound | RejectPerOperation;
}
}| 字段 | 类型 | 说明 |
|---|---|---|
| datasources | Datasources | 数据源 参考地址 |
| log | Array\<LogLevel | LogDefinition> | 确定日志类型和级别 参考地址 |
| errorFormat | ErrorFormat | 确定 Prisma 返回的错误级别和格式 参考地址 |
| rejectOnNotFound | RejectOnNotFound | RejectPerOperation | 抛错说明 参考地址 |
prisma-init 命令行参数
prisma-init 命令行支持:--dev, --prod, --debug 三个指令
// 设置环境变量 NODE_ENV = dev,适合于开发环境
npx prisma-init --dev// 设置环境变量 NODE_ENV =production
npx prisma-init --prod// 设置环境变量 DEBUG = prisma-plugin 显示调试信息
npx prisma-init --dev --debugPrisma cli 命令行参数说明
prisma init
初始化 prisma, 用于项目的第一次初始化操作, 它只需要执行一次, 它会在项目中创建一个 .env prisma/schema.prisma 的案例文件。当项目中已存在相关文件时,它会提示文件已存在。
// 默认初始化
npx prisma init
// 指定数据库初始化
npx prisma init --datasource-provider mysql
// 指定url进行初始化。 备注:它会检测数据库是否能链接成功
npx prisma init --url 'mysql://user:password@localhost:3306/mydb'prisma generate
初始化 prisma 客户端代码, 它的核心能力是生成 Typescript 类型, 初始化 prisma 服务。 会在 node_modules/.prisma 下自动生成所有 modules 的类型文件, 方便开发人员开发, 提升开发效率。
// 默认初始化客户端代码,当modules有变动时需要重新执行此命令
npx prisma generate
// watch 模式生成客户端代码,当 prisma/schema.prisma 文件有改动时,会自动生成客户端代码
npx prisma generate --watchprisma studio
图形化管理数据库数据,可以增删改查,不推荐使用,功能不够强大,推荐本地数据库管理工具,例如:Navicat
npx prisma studioprisma migrate
从Prisma模型创建迁移,将其应用于数据库, 它会同步 schema.prisma 中定义的 model 到数据库。
// 同步 model 到数据库,会创建 migrations 用于储存同步记录
npx prisma migrate dev
// 为当前迁移命名
npx prisma migrate dev --name=init
// 根据本地 migrations 文件下迁移记录充值 数据库
prisma migrate reset
// 为生产环境做数据同步
prisma migrate deploy备注:
- 可以增加
--name=init参数为当前迁移命名 - 当
model没有变化时,不会生成新的迁移 - 当删除本地
migrations中迁移记录时,运行reset命令会删除数据库相关系信息,请慎重执行。
prisma db pull
从现有数据库中提取模式,更新Prisma模型
// 通过数据库表生成 schema.prisma 模型
npx prisma db pull
// 只在控制台打印生成的 schema.prisma
npx prisma db pull --print
// 强制覆盖本地定义的 model
npx prisma db pull --forceprisma db push
将Prisma模型状态推送到数据库
// 直接同步本地 model 到数据库中 (慎重操作:没有迁移记录,推荐使用 prisma migrate)
npx prisma db push- 命令行万能发 --help
npx prisma --help
npx prisma generate --help
npx prisma db pull --helpprisma 指令:参考文档
3 years ago