NodeJS Express使用ORM模型访问关系型数据库流程详解

下面我将为你详细讲解“NodeJS Express使用ORM模型访问关系型数据库流程详解”的完整攻略。

一、什么是ORM模型?

ORM模型,全称Object relational mapping,即对象关系映射。ORM模型是一种程序设计技术,将面向对象的编程语言和固定关系型数据库中间的转换。ORM通过简化了许多编程的过程,使用户能够更加简单的访问并操作数据库,增加系统的稳定性并提高工作效率。

目前常见的ORM框架有Sequelize、TypeORM、ORM2等,而本文所讲述的流程是基于Sequelize框架的。

二、使用Sequelize进行ORM操作流程

1. Sequelize框架的安装

在Node.js中使用Sequelize,需要对其进行安装。在终端命令窗口中执行如下命令:

npm i sequelize mysql2

2. Sequelize框架的连接配置

在应用程序的启动文件(一般为app.js)中,输入如下代码,连接MySQL数据库:

const Sequelize = require('sequelize');

const sequelize = new Sequelize("database-name", "user-name", "password", {
  host: "localhost",
  dialect: "mysql"
});

其中,上述的database-nameuser-namepasswordlocalhostmysql分别为你的数据库名称、用户名、密码、服务器名称、数据库引擎等。

3. 创建模型

在Sequelize中,模型是一个代表数据库中表的类。模型定义模型中包含的数据及其相关操作。根据业务需求,可以创建自定义模型。例如,下面代码中创建一个名为User(用户)的模型:

const User = sequelize.define("User", {
  name: Sequelize.STRING,
  age: Sequelize.INTEGER
});

其中,User是模型的名字,sequelize.define()参数二:列配置方法包含了所有与你想创建的模型相关的信息。

4. 数据库初始化

在创建模型后,还需要通过执行下述代码创建表(仅需执行一次):

sequelize.sync();

这个模型中定义的属性将自动映射到数据库表中,执行第一次同步时,会在MySQL数据库中创建一张名为users的表,其表结构与上述示例代码中User所定义的表结构相同。

5. 数据库增删改查

经过上述步骤,Sequelize框架已经可以实现ORM操作了。下面展示一些基础的操作:

// 新增用户
User.create({
  name: 'John',
  age: 20
});

// 查询用户
User.findOne({
  where: {
    name: 'John'
  }
});

// 更新用户信息
User.update({
  age: 21
}, {
  where: {
    name: 'John'
  }
});

// 删除用户
User.destroy({
  where: {
    name: 'John'
  }
});

三、使用Sequelize进行关联查询

1. 一对多关联

在Sequelize中,除了基本的增删改查外,还支持不同数据表之间的关联查询。例如一对多的关联。示例如下:

// 定义模型
const User = sequelize.define('User', {
  name: Sequelize.STRING
});

const Order = sequelize.define('Order', {
  productName: Sequelize.STRING
});

// 关联查询
User.hasMany(Order);
Order.belongsTo(User);

User.findOne({
  where: {
    name: 'John'
  },
  include: Order
}).then(user => {
  // 用户与订单的关联查询结果
  console.log(user.orders);
});

在上述代码中,我们通过User.hasMany(Order);Order.belongsTo(User);表示建立User与Order两个模型的一对多关联。上述代码执行结果,即为“John”用户的所有订单列表。

2. 多对多关联

除了一对多这种基础关联方式外,Sequelize还支持多对多的关联方式。示例如下:

// 定义模型
const User = sequelize.define('User', {
  name: Sequelize.STRING
});

const Project = sequelize.define('Project', {
  name: Sequelize.STRING
});

const UserProject = sequelize.define('UserProject', {
  roleId: Sequelize.INTEGER
});

// 关联查询
User.belongsToMany(Project, { through: UserProject });
Project.belongsToMany(User, { through: UserProject });

User.findOne({
  where: {
    name: 'John'
  },
  include: Project
}).then(user => {
  // 用户与项目的多对多关联查询结果
  console.log(user.projects);
});

在上述代码中,我们通过User.belongsToMany(Project, { through: UserProject });Project.belongsToMany(User, { through: UserProject });表示建立User、Project与UserProject三个模型之间的多对多关联关系。上述代码执行结果,即为“John”用户所参与的所有项目列表。

这就是使用Sequelize进行ORM操作和关联查询的完整攻略,希望能对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:NodeJS Express使用ORM模型访问关系型数据库流程详解 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Centos7 安装 Mysql8教程

    下面是详细的“Centos7 安装 Mysql8教程”的完整攻略。 简介 本教程将教您如何在Centos7操作系统上安装Mysql8数据库。 步骤 更新系统 在进行任何安装之前,您需要确保您的系统已经更新到最新版本,使用以下命令执行更新操作: sudo yum -y update 安装MySQL 8的yum源 sudo wget https://dev.my…

    database 2023年5月22日
    00
  • Mysql 如何查询时间段交集

    当我们需要查询两个时间段是否有交集时,可以使用 MySQL 中的 BETWEEN 运算符及逻辑运算符 AND,在查询时指定两个时间段,通过两个时间段的开始时间和结束时间来判断两个时间段是否存在交集。 以下是查询时间段交集的完整攻略: 1. 确认时间段字段 在进行查询时间段交集之前,首先需要确认所查询的表中存在两个时间段字段,例如:开始时间(start_tim…

    database 2023年5月22日
    00
  • 【Azure Cache for Redis】Python Djange-Redis连接Azure Redis服务遇上(104, ‘Connection reset by peer’)

    问题描述 使用Python连接Azure Redis服务,因为在代码中使用的是Djange-redis组件,所以通过如下的配置连接到Azure Redis服务: CACHES = { “default”: { “BACKEND”: “django_redis.cache.RedisCache”, “LOCATION”: “redis://xxxxxxxxx.…

    Redis 2023年4月10日
    00
  • Oracle实现动态SQL的拼装要领

    当我们需要根据一些动态情况来构建sql查询语句时,动态SQL的拼装就非常有用了。在Oracle中,可以通过使用动态SQL来拼接实现动态查询。下面是实现动态SQL的拼装要领: 步骤一:定义动态SQL 使用EXECUTE IMMEDIATE语句来定义动态SQL。 DECLARE sql_text VARCHAR2(200); BEGIN sql_text:= ‘…

    database 2023年5月21日
    00
  • Amazon DynamoDB和Amazon Redshift的区别

    Amazon DynamoDB和Amazon Redshift是AWS云平台上两个不同的数据库产品,它们有各自的使用场景和优点。下面是它们的详细比较。 概述 Amazon DynamoDB是一种全托管的NoSQL数据库服务,它具有快速、可扩展、可靠、弹性等特点。Amazon Redshift是一种全托管的数据仓库服务,它是基于列存储的架构,适合大规模的数据分…

    database 2023年3月27日
    00
  • Golang交叉编译之跨平台编译使用详解

    Golang交叉编译之跨平台编译使用详解 在 Golang 开发中,经常需要将代码编译成不同操作系统或 CPU 下的可执行文件,这个过程就被称为交叉编译。本文将介绍如何使用 Golang 进行跨平台编译。 准备工作 在进行 Golang 跨平台编译之前,需要先安装目标平台的交叉编译工具,以 Windows 平台为例: sudo apt-get update …

    database 2023年5月22日
    00
  • MYSQL 运算符总结

    MYSQL 运算符总结 MySQL 运算符主要包括算术运算符、比较运算符、逻辑运算符等。 算术运算符 算术运算符用于基本的数学运算,包括加、减、乘、除、求余等操作。其中,取余操作可以用于判断一个数是否是偶数或奇数等应用场景。 示例 SELECT 5 + 3; — 输出 8 SELECT 10 – 2; — 输出 8 SELECT 6 * 4; — 输出…

    database 2023年5月22日
    00
  • DBA必备的Mysql知识点:数据类型和运算符

    摘要:本文主要为大家带来Mysql中的3种数据类型和3种运算符。 本文分享自华为云社区《Mysql中的数据类型和运算符》,作者: 1+1=王。 Mysql的数据类型 Mysql支持数值型、文本型和日期时间型三大数据类型。 数值型数据 数值型是描述定量数据的数据类型,包括整数型数据类型和浮点型数据类型。 整数型数据类型 整数型数据类型包括INTEGER、SMA…

    MySQL 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部