保姆级教程——号称下一代Node.js,Typescript的orm的prisma 如何在nest.js中使用

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 保姆级教程——号称下一代Node.js,Typescript的orm的prisma 如何在nest.js中使用

什么是orm

ORM(对象关系映射)是一种技术或工具,用于在关系型数据库和面向对象编程语言之间建立映射关系。它允许开发人员使用面向对象的方式来操作数据库,而无需直接编写复杂的 SQL 查询。

ORM 的主要目标是减少开发人员在数据库操作和对象操作之间的转换工作,提高开发效率并降低出错的可能性。它通过将数据库表映射为对象的类,将表中的行映射为对象的实例,以及将表中的列映射为对象的属性,使得开发人员可以使用常见的面向对象的概念(例如继承、关联等)来处理数据。

ORM 框架通常提供以下功能:

  1. 对象关系映射:将数据库表和行映射为对象和对象属性。
  2. 查询语言:提供一种高级的查询语言,使开发人员能够以面向对象的方式执行数据库查询,而不是直接编写 SQL 查询。
  3. 数据库操作:封装数据库的增删改查操作,提供简洁的接口来操作数据。
  4. 缓存管理:提供缓存机制以提高性能,并减少对数据库的访问。
  5. 数据关联和关系管理:支持定义和管理对象之间的关联关系,例如一对一、一对多、多对多等关系。
  6. 事务管理:提供事务支持,确保数据库操作的原子性和一致性。

一些常见的 ORM 框架包括:Hibernate(Java)、Entity Framework(.NET)、Django ORM(Python)、Sequelize(Node.js)等。这些框架提供了强大的功能和工具,简化了与数据库的交互,使开发人员能够更专注于业务逻辑而不是底层的数据库操作。

使用 ORM 可以提高开发效率、减少代码量,并且更易于维护和重构。然而,ORM 也有一些局限性,例如性能损耗、复杂查询的限制等。因此,在选择使用 ORM 还是直接编写 SQL 查询时,需要根据具体的项目需求和性能要求进行权衡和选择。

为什么选择prisma

Prisma 的主要目标是提高应用程序开发人员在使用数据库时的工作效率。以下是Prisma如何实现这一目标的几个例子:

  • 在对象中思考而不是映射关系数据
  • 查询而不是类以避免复杂的模型对象
  • 数据库和应用程序模型的单一事实来源
  • 防止常见陷阱和反模式的健康约束
  • 使正确的事情变得容易的抽象( “成功坑”)
  • 可在编译时验证的类型安全数据库查询
  • 减少样板 因此开发人员可以专注于其应用的重要部分
  • 在代码编辑器中自动完成, 无需查找文档

综合来说,Orm让开发者更关心对象的思考,减少对sql的依赖

Prisma 的主要目标是提高应用程序开发人员在使用数据库时的工作效率。再次考虑生产力和控制之间的权衡,这就是Prisma的适应方式:

image.png

在nest.js项目中构建prisma

项目所需依赖包如下:


pnpm add prisma-binding @prisma/client 
pnpm add -D prisma

vscode扩展记得要下载prisma插件,这样会有代码高亮以及提示

image.png

安装完成后,就可以开始我们的项目了

image.png

在命令行输入pnpm prisma 之后可以看到prisma的命令,本篇博客只介绍几种常用的的命令

首先用pnpm prisma init初始化我们的项目,完成后,可以看到出现了一个.env文件,它是配置数据连接的地方

image.png

我这里就以mysql为例,这是我的mysql连接的账户信息 我们在用prisma时,它可以自动帮我们创建好表的,最后的那一块定义自己想要的表名就行

image.png

image.png

接下来写第一张表

image.png

prisma对mysql的数据格式的封装

image.png

@default(autoincrement)是定义id让它自增长 在定义id时必须加上@id 不然会出错 , @db.xxx

后面都是mysql数据库的一些方法,比如你不想要String 想要255的,就可以


username String @db.VarChar(255)

在写完一张表的结构后 需要pnpm prisma migrate dev生成迁移文件

image.png

每次跑会让我们定义一个名字,自定义就行,也可以不给,直接回车即可

可以看到迁移文件生成的文件目录,这里类似于日志记录着每一次我们数据库的改动

image.png

接着打开数据库可视化工具看看

image.png

接下来我们要来对其进行一些crud的操作吧

首先创建一个prisma服务模块,我们引入查询构造器,让服务继承这个类,在prisma中很重要的就是这个查询构造器,它可以帮助我们实现一系列的功能

image.png

接着在controller中使用服务 创建一个基本的crud模板,请求都是异步的,所以需要用上async await

prisma.controller.ts

复制代码

import { Controller, Get, Post, Body, Patch, Param, Delete, UsePipes, ParseIntPipe } from '@nestjs/common';
import { PrismaService } from './prisma.service';
@Controller('prisma')
export class PrismaController {
    constructor(private readonly prisma: PrismaService) { }
    @Get()
    async getUser() {
        return await this.prisma.user.findMany()
    }
    @Post()
    async createUser(@Body() dto: { username: string, age: number }) {
        return await this.prisma.user.create({
            data: {
                username: dto.username,
                age: +dto.age
            }
        })
    }
    @Patch(':id')
    async updateUser(@Param('id') id: number, @Body() dto: { username: string, age: number }) {
        return await this.prisma.user.update({
            where: {
                id: +id
            },
            data: {
                username: dto.username,
                age: +dto.age
            }
        })
    }
    @Delete(':id')
    @UsePipes(ParseIntPipe)
    async deleteUser(@Param('id') id: number) {
        return await this.prisma.user.delete({
            where: {
                id: id
            }
        })
    }
}

prisma非常的语义化 查询全部就是findMany()里面也可以跟where加限定条件 分页等

创建create 删除delete 更新update 大家可以自己尝试一下

写在最后

关于prisma还要挺多知识的,orm我也用过typeOrm 对比一下 prisma确实更为方便,无论哪一个都是为了提高我们开发效率,简化了操作,但是对于原生sql来说我们也要好好学习,因为很多api都是sql里面的,这样开发起来我们知道了sql的操作,就知道prima的操作了,不用多记这些api,希望这篇文章能帮助到大家吧!

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
26天前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
44 1
|
29天前
|
Web App开发 JavaScript 前端开发
2024年5月node.js安装(winmac系统)保姆级教程
本篇博客为2024年5月版Node.js安装教程,适用于Windows和Mac系统。作者是一名熟悉JavaScript与Vue的大一学生,分享了Node.js的基本介绍、下载链接及简单安装步骤。安装完成后,通过终端命令`node -v`验证版本即可确认安装成功。欢迎关注作者,获取更多技术文章。
28 2
2024年5月node.js安装(winmac系统)保姆级教程
|
13天前
|
存储 JavaScript NoSQL
Node.js新作《循序渐进Node.js企业级开发实践》简介
《循序渐进Node.js企业级开发实践》由清华大学出版社出版,基于Node.js 22.3.0编写,包含26个实战案例和43个上机练习,旨在帮助读者从基础到进阶全面掌握Node.js技术,适用于初学者、进阶开发者及全栈工程师。
40 9
|
1月前
|
JavaScript 前端开发 中间件
JS服务端技术—Node.js知识点
本文介绍了Node.js中的几个重要模块,包括NPM、Buffer、fs模块、path模块、express模块、http模块以及mysql模块。每部分不仅提供了基础概念,还推荐了相关博文供深入学习。特别强调了express模块的使用,包括响应相关函数、中间件、Router和请求体数据解析等内容。文章还讨论了静态资源无法访问的问题及其解决方案,并总结了一些通用设置。适合Node.js初学者参考学习。
39 1
|
1月前
|
开发框架 JavaScript 前端开发
Node.js日记:客户端和服务端介绍、Node.js介绍
Node.js日记:客户端和服务端介绍、Node.js介绍
|
1月前
|
JavaScript 前端开发 开发工具
Node.js——初识Node.js
Node.js——初识Node.js
34 4
|
1月前
|
JavaScript 前端开发 持续交付
构建现代Web应用:Vue.js与Node.js的完美结合
【10月更文挑战第22天】随着互联网技术的快速发展,Web应用已经成为了人们日常生活和工作的重要组成部分。前端技术和后端技术的不断创新,为Web应用的构建提供了更多可能。在本篇文章中,我们将探讨Vue.js和Node.js这两大热门技术如何完美结合,构建现代Web应用。
36 4
|
28天前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API
使用JavaScript和Node.js构建简单的RESTful API
|
2月前
|
JavaScript 前端开发
TypeScript【类型别名、泛型】超简洁教程!再也不用看臭又长的TypeScript文档了!
【10月更文挑战第11天】TypeScript【类型别名、泛型】超简洁教程!再也不用看臭又长的TypeScript文档了!
下一篇
DataWorks