Prisma初体验
Prisma逆向生成数据模型
初次体验Prisma工程搭建,在ORM领域表现不错。Prisma是一个面向Node.js和TypeScript的开源ORM。它用于替代编写普通的SQL,或使用另一种数据库访问工具,如SQL查询生成器(如knex.js)或ORMs(如TypeORM和Sequelize)。Prisma目前支持PostgreSQL、MySQL、SQLServer和SQLite。虽然Prisma可以与普通JavaScript一起使用,但它包含TypeScript,并提供了一种类型安全级别,超出TypeScript生态系统中其他Orm的保证范围。如下工程在window 10环境下的实施。
1.创建工程目录
D:\project\example\typeorm> mkdir hello-prisma
D:\project\example\typeorm> cd hello-prisma
2.项目初始化
D:\project\example\typeorm>npm init -y
D:\project\example\typeorm>npm install prisma typescript ts-node @types/node --save-dev
3.创建tsconfig.json
在工程更目录下创建tsconfig.json,并添加如下配置信息:
{
"compilerOptions": {
"sourceMap": true,
"outDir": "dist",
"strict": true,
"lib": ["esnext"],
"esModuleInterop": true
}
}
注:可以使用tsc --init创建,windows系统需要识别tsc命令。
4.创建Prisma schema文件
在工程目录中使用如下命令创建Prisma schema文件(系统默认文件名为schema.prisma):
D:\project\example\typeorm> npx prisma init
5.工程目录
注意:index.ts文件为后期创建的文件。
6.配置数据信息
在工程目录中的.env文件中设置DATABASE_URL(本工程使用的mysql数据库):
DATABASE_URL="mysql://[用户名]:[密码]@localhost:3306/world?schema=public"
在prisma文件夹下的schema.prisma文件中修改数据库类型:
datasource db {
provider = "mysql" //初始默认值为“postgresql”
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
7.逆向生成数据模型
使用如下命令生成数据模型【数据库中存在表数据】:
D:\project\example\typeorm> npx prisma introspect
在文件中系统会自动增加模型数据信息:
model post {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime
title String @db.VarChar(255)
content String?
published Boolean @default(false)
authorId Int
user user @relation(fields: [authorId], references: [id])
@@index([authorId], name: "authorId")
}
//如下是新增model部分
model profile {
id Int @id @default(autoincrement())
bio String?
userId Int @unique
user user @relation(fields: [userId], references: [id])
}
model user {
id Int @id @default(autoincrement())
email String @unique
name String?
post post[]
profile profile?
}
8.变更数据表中的信息
在工程目录文件中添加index.ts文件,其内容如下:
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
// ... you will write your Prisma Client queries here
//查询数据库中user的记录数据
const allUsers = await prisma.user.findMany()
console.log(allUsers)
//对user表进行添加数据
await prisma.user.create({
data: {
name: 'Alice',
email: 'alice@prisma.io',
posts: {
create: { title: 'Hello World' },
},
profile: {
create: { bio: 'I like turtles' },
},
},
})
//查找数据
const allUsers1 = await prisma.user.findMany({
include: {
posts: true,
profile: true,
},
})
console.dir(allUsers1, { depth: null })
//更新post数据
const post = await prisma.post.update({
where: { id: 1 },
data: { published: true },
})
console.log(post)
const posts = await prisma.profile
.findUnique({
where: { id: 1 },
})
.user()
.posts()
console.log(posts)
}
main()
.catch(e => {
throw e
})
.finally(async () => {
await prisma.$disconnect()
})
9.执行index.ts文件
使用如下命令执行index.ts脚本:
D:\project\example\typeorm> npx ts-node index.ts
总结,简单、明了、高效,让程序员更加关注业务。Typeorm同样是体验性很好的ORM,就是在逆向工程方面在npm v7版本下bug问题,大多是包不兼容问题。后期会继续研究与整合新组件或框架,搭建一个高效的研发平台架构。敬请关注,谢谢!