详解如何使用Node.js连接数据库ORM

 更新时间:2022年12月20日 08:39  点击:1125 作者:鱼露

ORM

在上文中我们讲了如何使用node.js mysql2连接数据库,接下来讲讲ORM

下面摘一段百科对ORM的介绍

对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。

讲人话就是,在常用面向对象的语言中,我们用class(不一定要class)来映射数据库中的表,用实例化对象来映射表中的每一条数据,每一栏用对象属性表示

比如下面这个类可以映射为数据库中的表,有两列数据,分别是name和age

class User {
    name: string
    age: string
}

下载量

目前在nodejs中常用的ORM有prisma,sequlize,typeorm等等

下面是他们的下载量对比

typeorm

接下来我们就来尝试一下如何用typeorm来连接数据库, typeorm提供了一些装饰器让我们来描述一张表的结构

import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()
export class User {
  @Column()
  name: string;
  @Column()
  age: string;
}

CRUD的时候只要像操作一个对象那样操作即可,框架会自动帮你生成sql语句执行,这样就可以专注于业务而无需过多关注数据库的细节了

const user = new User();  
user.name = "jym";  
user.age = 18;  
await repository.save(user);  
const allUsers = await repository.find();  
const u = await repository.findOne({ name: "jym" });  
await repository.remove(u);

sequlize

接下来我们就来尝试一下如何用sequlize来连接数据库, sequlize提供了define让我们来定义一张表的结构

const { Sequelize, DataTypes } = require('sequelize');  
const sequelize = new Sequelize('jym', 'root', 'password', {  
    host: 'localhost',  
    dialect: 'mysql'
});
const User = sequelize.define('User', {  
    // 在这里定义模型属性  
    name: {  
        type: DataTypes.STRING,  
    },  
    age: {  
        type: DataTypes.STRING  
    }  
});

同样,对一行数据的CRUD可以映射为对象实例的操作

const u = await User.create({ name: "jym" });  
console.log(u.name); // "jym"  
await u.save();
// 查询所有用户  
const users = await User.findAll();
...
const u = await User.findOne({ where: { name: 'jym' } });  
u.name = 'test'
u.save()
u.destroy()

prisma

prisma也是差不多的方式,只不过prisma提供了另一套 Prisma schema语法来描述自己的应用模型,相比上面两个,它的语法更简洁,描述能力也不比class语法差,其实定义一套这样的语法也满足依赖倒置的原则,这样在以后要扩展其他语言比如GO,JAVA之类的也很方便。

model User {
    id Int @id @default(autoincrement())
    email String @unique
    name String?
    posts Post[]
}

import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
const user = await prisma.user.findUnique({
    where: {
        name: 'jym',
    },
})

接下来会进一步讲解如何用node.js开发一个应用,感兴趣的朋友记得关注一波,谢谢支持

以上就是详解如何使用Node.js连接数据库ORM的详细内容,更多关于Node.js连接数据库ORM的资料请关注猪先飞其它相关文章!

原文出处:https://juejin.cn/post/7178471630514389049

[!--infotagslink--]

相关文章

  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
  • 深入分析C#中WinForm控件之Dock顺序调整的详解

    本篇文章是对C#中WinForm控件之Dock顺序调整进行了详细的分析介绍,需要的朋友参考下...2020-06-25
  • mysqldump命令导入导出数据库方法与实例汇总

    mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21
  • Mysql数据库错误代码中文详细说明

    1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23
  • WebStorm无法正确识别Vue3组合式API的解决方案

    这篇文章主要介绍了WebStorm无法正确识别Vue3组合式API的解决方案,帮助大家更好的理解和学习使用vue框架,感兴趣的朋友可以了解下...2021-02-18
  • c#异步读取数据库与异步更新ui的代码实现

    这篇文章主要介绍了c#从数据库里取得数据并异步更新ui的方法,大家参考使用吧...2020-06-25
  • Yii2.0高级框架数据库增删改查的一些操作

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2使用中的一些基本的增删改查操作。 User::find()->all(); //返回所有用户数据; User::findOne($id); //返回 主键...2015-11-24
  • C# Winform中实现主窗口打开登录窗口关闭的方法

    这篇文章主要介绍了C# Winform中实现主窗口打开登录窗口关闭的方法,这在需要用户名密码的软件项目中是必用的一个技巧,要的朋友可以参考下...2020-06-25
  • antd Form组件方法getFieldsValue获取自定义组件的值操作

    这篇文章主要介绍了antd Form组件方法getFieldsValue获取自定义组件的值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • C# winform打开Excel文档的方法总结(必看篇)

    下面小编就为大家带来一篇C# winform打开Excel文档的方法总结(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • springBoot 项目排除数据库启动方式

    这篇文章主要介绍了springBoot 项目排除数据库启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-10
  • MYSQL数据库使用UTF-8中文编码乱码的解决办法

    1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci” 或执行语句: 复制代码 代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 创...2015-10-21
  • C# WinForm快捷键设置技巧

    这篇文章主要给大家介绍C# winform快捷键设置技巧,涉及到C winform快捷键相关知识,对C winform知识感兴趣的朋友可以参考下本篇文章...2020-06-25