Node.js的ORM框架sequelize

1 什么是ORM框架

ORM(Object Relational Mapping,对象关系映射),是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术,通过描述对象和数据库之间映射的元数据把程序中的对象自动持久化到关系数据库中。它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了 。

持久化将内存中的数据永久的保存到存储设备中(文件、数据库)

ORM就是把业务实体中的对象与关系数据库中的关系数据关联起来。对象——关系映射(ORM)系统一般以中间件的形式存在。

ORM技术特点:

  1. **提高了开发效率。**ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。
  2. ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。

2 对象与关系(表)的映射

类 <——> 表
属性 <——> 列
对象 <——> 行

3 什么是Sequelize

基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),。它当前支持MySQL、MariaDB、SQLite、PostgreSQL、Sql Server 数据库。

特点:

  • 强大的模型定义,支持虚拟类型。
  • 支持完善的数据验证,减轻前后端的验证压力。
  • Sequelize的查询非常全面和灵活

4 通过ORM实现CRUD(增、删、改、查)

4.1 安装模块

安装mysql2模块,mysql2模块支持sequelize模块

npm install mysql2

安装sequelize模块

npm install sequelize

接下来以info数据库中的db_user表为例进行演示,db_user表的数据如下:
在这里插入图片描述
表的设计如下:
在这里插入图片描述

4.2 创建数据库配置文件

在当前项目下新建文件夹db,然后在该文件夹下新建dbconfig.js,配置sequelize,代码如下:

// 导入sequelize模块
const Sequelize = require("sequelize");
// 配置数据库连接对象(默认带有数据库连接池):数据库名,用户名,密码,配置
let sequelize = new Sequelize("info", "root", "123456", {
    host: "localhost", // 本机地址
    port: 3306, // 数据库端口号
    dialect: "mysql", // 数据库类型,mysql|sqlite|postgres|mssql
    pool: { // 数据库连接池
        max: 5, // 连接池中最大连接数量
        min: 0, // 连接池最小连接数量
        idle: 10000, // 如果某个线程10秒内没有被使用,则释放该线程
    },
    debug: true // 显示调试信息
})
module.exports = sequelize; // 导出模块

4.3 创建模型

在定义模型时注意:

  1. 类名和表名的映射:可以同名
  2. 类的属性和表的列的映射:①如果属性名和列名相同:不需要指定列名,自动将属性名映射为列名;②如果属性名和列名不相同:要在映射时通过fields来指定列名

在当前项目下新建一个文件夹model,在其中新建一个文件夹userModel.js,用来放置创建的模型,代码如下:

// 导入模块
const Sequelize = require("sequelize");
// 导入数据库配置文件
const db = require("../db/dbconfig");
// 定义模型
const user = db.define("db_user", {
    id: { // 设置属性名,此属性名与表的列名相同
        type: Sequelize.INTEGER, // 数据类型,对应数据库列的数据类型
        primaryKey: true, // 设置主键
        autoIncrement: true, // 设置自增,数据库中也为该列设置了自增
        unique: true // 设置值唯一
    },
    name: { // 该属性名与列名不相同,表中为username
        type: Sequelize.STRING(255),
        allowNull: false, // 是否允许为空
        field: "username" // 与数据库中的列名相对应
    },
    pwd: {
        type: Sequelize.CHAR(255),
        allowNull: false, // 不允许为空
        field: "password" // 与表中列名相对应
    },
    age: {
        type: Sequelize.INTEGER,
    }
}, {
    //映射表名的设置,true表示使用用户给定的表名,false表示MySQL自动生成表名(在后面加s)
    freezeTableName: true,
    // 是否自动生成时间戳(createAt列、updateAt列),false表示不生成
    timestamps: false
})

module.exports = user; // 导出模型

4.4 查询操作

sequelize中查询,操作:findAll(查询所有,返回数组)、findOne(查询一个)

在当前项目下的routes文件夹下新建文件orms.js
在这里插入图片描述
【该段代码只写一次】首先在该文件中导入express模块,使用express路由模块化管理,导入模型userModel.js,导出路由router。

const express = require("express");
const router = express.Router(); // 使用路由模块化管理
const User = require("../model/userModel"); // 导入模型

module.exports = router; // 导出

在导出路由模块之前,编写查询代码。注意:上述代码在orms.js文件夹中只写一次。

查询代码如下:

// 查询所有信息:http://localhost:3000/orms/all
router.get("/all", (req, res) => {
    User.findAll({
        raw: false // 不显示时间戳
    }).then(result => {
        res.send(result); // 发送结果
    })
})

【app.js中的配置只写一次】除此之外,还需要在app.js中配置路由。导入并使用路由文件orms.js。

var ormsRouter = require("./routes/orms");

app.use('/orms', ormsRouter);

启动服务器,在Postman中测试查询链接是否正常,成功显示数据库中信息,说明查询正确。
在这里插入图片描述

4.5 插入操作

sequelize中插入:create

插入代码如下:

// 插入一条信息:http://localhost:3000/orms/add
router.post("/add", (req, res) => {
    // 获取插入的参数
    // 获取的参数不与数据库中的列名相同,而是与模型userModel中的属性名相同
    let name = req.body.name;
    let pwd = req.body.pwd;
    let age = req.body.age;
    User.create({ // 调用create方法插入数据
        id: null,
        name: name,
        pwd: pwd,
        age: age
    }).then(result => {
        res.send({
            code: result,
            msg: "插入成功"
        })
    }).then(err => console.log(err));
})

启动服务器,在Postman中输入测试链接:http://localhost:3000/orms/add,显示插入数据库成功
在这里插入图片描述
查看数据库,发现信息已经插入到数据库中了。
在这里插入图片描述

4.6 删除数据

sequelize删除:destroy

具体代码如下:

// 删除一条数据:http://localhost:3000/orms/del
router.delete("/del", (req, res) => {
    // 获取要删除的信息的id
    let id = req.body.id;
    // 删除操作
    User.destroy({
        where: { // 相当于sql语句中的where子句
            id: id // 模型的属性
        }
    }).then(result => {
        res.send({
            code: result.affectedRows, // 删除数据影响的行数
            msg: "删除成功"
        })
    }).catch(err => {
        console.log(err);
        res.send({
            code: 1000,
            msg: "删除失败"
        })
    })

启动服务器,在Postman中输入链接:http://localhost:3000/orms/del,成功显示信息,插入数据成功
在这里插入图片描述

4.7 更新数据

更新时,首先找到要更新的人的id,然后根据id更新其他的数据。

更新代码如下:

// 更新数据:http://localhost:3000/orms/del
router.put("/del", (req, res) => {
    // 获取参数
    let id = req.body.id;
    let name = req.body.name;
    let pwd = req.body.pwd;
    let age = req.body.age;
    // 更新操作
    User.findOne({
        where: {
            id: id
        }
    }).then(person => {
        person.update({
            name: name,
            pwd: pwd,
            age: age
        }).then(result => {
            res.send({
                code: result,
                msg: "更新成功"
            })
        }).catch(err => {
            console.log(err);
            res.send({
                code: 1000,
                msg: "更新失败"
            })
        }).catch(err => {
            console.log(err);
            res.send({
                code: 1000,
                msg: "没有该信息"
            })
        })
    })
})

启动服务器,在Postman中输入链接:http://localhost:3000/orms/del,更改信息成功
在这里插入图片描述
刷新数据库,信息更改成功。
在这里插入图片描述

5 Sequelize查询

在这里插入图片描述
在这里插入图片描述
3、模糊查询:
在这里插入图片描述
三、between查询
在这里插入图片描述
5、in查询
在这里插入图片描述
6、查询结果排序
在这里插入图片描述
7、and和or查询
在这里插入图片描述
在这里插入图片描述
8、分页查询limit 和offset
在这里插入图片描述

7 Sequelize的数据验证

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值