Node.js作为我们前端的一项技术,大多数时间是作为一个Javascript的运行环境而存在。但是其优秀的异步操作以及非阻塞式的程序运行方式,也让Node.js能够同时并发处理数千个连接。前端工程师可以用很低的学习成本来使用它完成常用的服务端代码。

ORM

ORM:对象关系映射(Object Relational Mapping)是一种程序设计技术。简单来说ORM可以将我们的底层数据库的各种操作进行一定的封装,我们就可以通过更加熟悉的开发语言来书写对应的数据库命令,ORM则可以将这些数据库操作命令转换为对应的SQL语句。那么我们本次所要了解的就是Prisma 。

Prisma

下一代 Node.js、TypeScript、Go 的数据库 ORM

Prisma是一个开源的数据库工具链项目,帮助开发人员更快地构建应用程序并减少错误,支持PostgreSQL、MySQL、MongoDB、SQL Server和SQLite。

如果想要了解一门技术的用法,那么我们则需要通过实际的上手使用它来进行一点点的开发。

  • · 首先我们需要初始化一个项目

mkdir prisma-demo # 创建一个目录
cd prisma-demo # 通过命令行来进入该项目目录
npm init -y # 将项目进行初始化
{"name": "prisma-demo","version": "1.0.0","description": "","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"keywords": [],"author": "","license": "ISC"
}
  • · 然后我们将本次所需要使用的prisma进行安装一下

    npm install prisma -D # 安装prisma
    
  • · 安装完成后,我们可以通过npx prisma init -h命令来查看prisma相关的命令帮助信息

  • Setup a new Prisma projectUsage$ prisma init [options]
    Options-h, --help   Display this help message
    --datasource-provider   Define the datasource provider to use: PostgreSQL, MySQL, SQLite, SQL Server or MongoDB (Preview)--url   Define a custom datasource urlExamplesSetup a new Prisma project with PostgreSQL (default)
    # 默认连接的数据库为PostgreSQL的数据库$ prisma init
    # 初始化prisma
    Setup a new Prisma project and specify MySQL as the datasource provider to use$ prisma init --datasource-provider mysql
    # 可以通过该命令来定义连接的数据库类型
    Setup a new Prisma project and specify the url that will be used$ prisma init --url mysql://user:password@localhost:3306/mydb
  • · 在此处我们通过使用prisma init --datasource-provider sqlite来定义默认的数据库为SQLite

    • SQLite是一个文件数据库,自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎,在使用过程中较为方便。
    npx prisma init --datasource-provider sqlite # 配置默认数据库为sqlite
    
  • · 来到我们的代码界面

    // prisma -> schema.prisma
    // 本文件为数据库模型的配置文件 所有数据库模型的配置都在此文件
    generator client {provider = "prisma-client-js"
    }// 数据源
    datasource db {provider = "sqlite"  // 数据库url      = env("DATABASE_URL")// 数据库的连接地址
    }
    // 如果需要在VScode中高亮显示代码提示 则需要安装名为 Prisma 的语法插件
  • · 创建数据模型

    // 用户的数据模型
    model user {id        String   @id @unique @default(uuid())// 用户ID                不能重复  默认为UUIDuserName  String   @unique @map("user_name")// 用户名           不能重复 @map表示为字段定义别名password  String   @default("")phone     Int?     @unique// 手机号nickName  String?  @default("一个不愿意透漏姓名的大佬") @map("nickName")// 昵称address   String?  @default("")// 地址gender    String?  @default("")// 性别createAt  DateTime @default(now()) @map("create_at")// 创建时间updateAt  DateTime @updatedAt @map("update_at")// 更新时间autograph String   @default("")// 个性签名    @@map("users")// 给数据表进行命名
    }// 文件模型
    model post {id        String   @id @unique @default(uuid())// 建立表的关联关系authorId  String   @default("") @map("author_id")// 作者ID 关联用户的ID@@map("posts")
    }

· 数据模型新建完毕后,我们回到我们的命令行中,通过使用npx prisma db push可以在当前文件下直接生成数据库

- node_modules
- prisma- dev.db-schema.prisma
- .env
- app.js
  • 我们生成的文件数据库正常情况下无法打开,需要安装VScode中另外的插件 SQLite即可正常的打开我们的文件数据库
  • 除了以上安装插件的方法以外,我们也可以在项目目录中使用npx prisma studio 命令来打开prisma内置的服务器在浏览器端查看我们的数据库以及数据表
  • 数据库的操作

  • 接下来则是数据库的相关操作

  • · 在根目录创建db.js文件,并且进行相应内容的引入

  • import { PrismaClient } from '@prisma/client'// 引入 prismaClient
    const db = new PrismaClient();db.$connect().catch((err) => console.error(err));
    // 进行数据库的连接export default db
  • · 创建控制器

    // userController.js
    import prisma from "../utils/db";
    // 引入数据库的连接服务
    async function createUser() {// 创建用户try {await prisma.user.create({// 调用prisma的创建功能data: {userName:'test',password:'test',nickName:'一个不愿意透漏姓名的大佬'},});} catch (err) {// 异常捕获console.log(err);}
    }
    // 调用创建用户的方法
    createUser()
    
  • · 通过在命令行中执行node userController.js本文件 即可创建一个用户名为test 密码为test的用户

  • · 接下来我们可以通过prisma的查找语句来进行查询用户数据

  • async function findUsers(userName){const findUser = await prisma.user.findMany({where:userName})console.log(findUser)
    }
    findUsers('test')
    /*# node userController.js[{id:'xxxxxxxx',userName:'test',password:'test',nickName:'一个不愿透漏姓名的大佬',createAt:2022-03-11T04:05:43.175Z,updateAt:2022-03-11T04:05:43.175Z}]
    */
    
  • · 除了这些以外我们在数据库操作中经常会有多表关联的情况,那么我们就需要在数据模型中进行相应的配置

  • model user {id        String   @id @unique @default(uuid())......// 个性签名// @@map为数据表定义名字
    + post      post[]
    // 生成两个表的关联关系@@map("users")
    }model post {id        String   @id @unique @default(uuid())// 建立表的关联关系
    + author    user     @relation(fields: [authorId], references: [id])
    + // fields 表示当前模型中的字段  references表示需要关联的模型中的字段authorId  String   @default("") @map("author_id")// 作者ID 关联用户的ID.....@@map("posts")
    }
    
  • · 更新完数据库相关的数据模型后则需要重新生成数据库以及数据表

  • npx prisma db push
  • · 然后我们依据上方创建用户的操作,添加一个创建文章的方法

    async function createPost(){const user = await prisma.user.findFirst(); // 查找第一个用户await prisma.post.create({// 调用创建文章内容的方法  data:{title:'xxx',desc:'xxx',authorId:user.id//填写进去相应的数据}})
    }
    createPost()
    // node createPost.js 执行该文件以及方法
    
  • · 生成文章后我们可以再添加一个查找文章的方法

    async function findPost(){const post = await prisma.post.findMany({where:{}})console.log(post)/*[{id:'xxx',title:'xxx',desc:'',content:'',...},{id:'xxx',title:'xxxx',desc:'xxx',content:'xxxx',...}]*/
    }
    findPost()
    
  • · 以上为创建文章以及查找文章,如果我们需要查找文章并且需要知道关联数据则可以通过如下方法

    async function findPost(){const post = await prisma.post.findMany({// where为限制条件where:{},+  include:{+    author: true+  }})console.log(post)/*[{id:'xxx',title:'xxx',desc:'',content:'',...+           author:{+              id:'xxx',+               userName:'xxx',+                 password:'xxxx',+                ...+           }},]*/
    }
    findPost()
    
  • 以上为本次Prisma的上手使用,ORM也可以搭配Express.js、Koa.js、Egg.js等Web开发框架来进行服务端接口的开发,更多内容以及查询语句等用法,大家也可以前往以下官网查看对应文档。

英文文档:https://prisma.io

中文文档:https://prisma.yoga/reference/api-reference/prisma-client-reference

*获取千锋教育学习视频资料+源码笔记 ,进学习交流群

请添加下方微信(备注CSDN推荐)

基于Node.js的ORM框架 Prisma的上手使用相关推荐

  1. 常见的基于node.js的web框架

    2019独角兽企业重金招聘Python工程师标准>>> 私人定制,十款最佳Node.js MVC框架 转载于:https://my.oschina.net/letiantian/bl ...

  2. 转 10 个最佳的 Node.js 的 MVC 框架

    10 个最佳的 Node.js 的 MVC 框架 oschina 发布于: 2014年02月24日 (33评) 分享到:  收藏 +322 Node.js 是一个基于Chrome JavaScript ...

  3. 10 个最佳的 Node.js 的 MVC 框架

    Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的, 易于扩展的网络应用· Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效, ...

  4. 十大 Node.js 的 Web 框架,快速提升工作效率

    Node.js 系统含有多种不同的结构,如 MVC.全栈.REST API 和生成器等.这些结构不仅提升了 Web 应用的开发效率,也优化了开发过程.在这里,我们收集整理了十个高效的 Node.js ...

  5. Pomelo:网易开源基于 Node.js 的游戏服务端框架

    Pomelo 是基于 Node.js 的高性能.分布式游戏服务器框架.它包括基础的开发框架和相关的扩展组件(库和工具包),可以帮助你省去游戏开发枯燥中的重复劳动和底层逻辑的开发.Pomelo 不但适用 ...

  6. 大文件分片上传前端框架_基于Node.js的大文件分片上传

    基于Node.js的大文件分片上传 我们在做文件上传的时候,如果文件过大,可能会导致请求超时的情况.所以,在遇到需要对大文件进行上传的时候,就需要对文件进行分片上传的操作.同时如果文件过大,在网络不佳 ...

  7. 关于node.js的web框架的应用及并发性能测试

    "Node.js 是服务器端的 JavaScript 运行环境,它具有无阻塞(non-blocking)和事件驱动(event-driven)等的特色,Node.js 采用 V8 引擎,同样 ...

  8. 认识Web前端、Web后端、桌面app和移动app新开发模式 - 基于Node.js环境和VS Code工具...

    认识Web.桌面和移动app新开发模式 - 基于Node.js环境和VS Code工具 一.开发环境的搭建(基于win10) 1.安装node.js和npm 到node.js官网下载安装包(包含npm ...

  9. node.js Web应用框架Express入门指南

    node.js Web应用框架Express入门指南 作者: 字体:[增加 减小] 类型:转载 时间:2014-05-28 我要评论 这篇文章主要介绍了node.js Web应用框架Express入门 ...

  10. NGINX配置基于Node.js服务的负载均衡服务器

    NGINX配置基于Node.js服务的负载均衡服务器 本部署指南说明了如何使用NGINX开源和NGINX Plus在Node.js应用程序服务器池之间平衡HTTP和HTTPS通信.本指南中的详细说明适 ...

最新文章

  1. 10远程连接连接不上华为云_从云手机到云游戏,5G会在多大程度上改变我们的生活?...
  2. 2022年美国大学生数学建模竞赛常见问题汇总
  3. boost::iostreams::stream_offset用法的测试程序
  4. 【EXLIBRIS】纸版书目整理 -- 大书架 上 【292 种】【327册】
  5. 使用ArrayList时设置初始容量的重要性
  6. Zerodium 称 iOS exploit 过剩,将暂停收购且买价或下跌
  7. 【黑马JS笔记】JavaScript基础语法
  8. YV12数据与AVFrame的相互转换
  9. 工程师素质拓展课程主页(2012级)
  10. 【笔记】运筹(上)——Rita_Aloha
  11. 华为日历怎么显示一月_华为10手机日历图标在哪 华为日历怎么显示
  12. 香农编码Shannon
  13. 教师评语计算机实验报告作业,作业实验报告评语大全
  14. 开发团队人员配备与角色分配
  15. 正点原子STM32(基于HAL库)2
  16. 基于CAN的网络管理
  17. 7-3 三维向量运算设计一个三维向量类,实现向量加法、减法以及向量与标量的乘法和除法运算。
  18. python中openpyxl库用法详解
  19. python可视化小案例giao
  20. The Biggest Water Problem(水题)

热门文章

  1. 如何清理多余的Windows桌面右键菜单
  2. 学单片机有前途还是嵌入式系统有前途?
  3. 与微软中国梁念坚先生商榷
  4. CRM高端制造业应用案例分析
  5. python 进化树_Python ete3有没有一种方法来扩展系统进化树的分支?
  6. linux nfs 测试 读写,部署NFS与测试NFS
  7. SpringBoot基础
  8. 哈尔滨工程大学 Beamer模板(LaTeX幻灯模板)
  9. pip 使用国内阿里云软件源
  10. 云计算时代迎接挑战方能脱颖而出