JS-sequelize(一种ORM框架)

sequelize是什么?

1.它是基于 promise 的运行在node环境的ORM框架;
2.它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能。
3.本文用操作数据库的例子来描述它用来进行模块化开发的步骤。
4.参考网址:https://www.sequelize.com.cn/core-concepts/getting-started
5.建议阅读:<<mock.js模拟数据>>中的
如何运行“node ./”中和生成package.json文件的方法。

一、安装

1.安装sequelize:npm install --save sequelize
2.此外,还须为所选数据库安装驱动程序,我选择mysql2:npm install --save mysql2
3.如下图,我们检查一下安装的状态:

json配置

二、使用

按以上要求配置好sequelize和mysql2驱动后
我们来玩一下数据库的操作:

  • 1.首先创建一个handleSQL文件夹,文件名随意,创建一个models文件夹用于放置创建数据库的表文件。
  • 2.其次,想要操作数据库,肯定要跟数据库建立联系

(1)在models文件夹下,创建一个db.js文件用来连接数据库:

const {Sequelize}=require('sequelize');

const seq=new Sequelize('my_honor','root','123456',{
    host:"localhost",/* 服务的主机名 */
    dialect:'mysql',/* 选择-->'mysql' | 'mariadb' | 'postgres' | 'mssql' */
    // logging:null
});
module.exports = seq;

(2)在handelSQL文件夹下创建index.js文件测试数据库的连接状态

// 测试数据库连接并创建表
const seq=require('../models/db');
(async function(){
    try{
        await seq.authenticate();
        // 连接成功
        console.log("连接成功!");
    }catch(err){
        console.log("连接失败!");
    }
}());
  • 3.在已知的数据库中创建表,思路:一个王者荣耀的数据库,包含了英雄类型表(hero_type)、英雄表(hero)、财富表(money)及数据库管理员表(Admin);

根据上述分析,在model文件中创建对应的js文件:
1)管理员表:

// 管理员表--id、账号、密码、姓名
// 导入模块
const seq = require('./db');
const { DataTypes } = require('sequelize');

// 定义模型的属性--除主键外的字段
const Admin = seq.define('Admin', {
    loginId: {
        type: DataTypes.STRING,
        allowNull: false
    },
    loginPwd: {
        type: DataTypes.STRING,
        allowNull: false
    },
    name: {
        type: DataTypes.STRING,
        allowNull: false
    }
}, {
    /* 模型参数:*/
    // freezeTableName:true,// 强制指定表名
    // tableName:"表名",//提供表名
    createdAt: false, //创建时间
    updatedAt: false, //修改时间
    paranoid: true, // deletedAt:"删除时间"-只是在数据上增加一个标记,避免真正意义上的删除
});

// 导出模块
module.exports = Admin;

2)英雄类型表-注意设置外键与英雄表进行连接:

// 英雄类型表--id、类型、方向
const seq=require('./db');
const { DataTypes }=require('sequelize');

const Hero_Type=seq.define("Hero_Type",{
    name:{
        type:DataTypes.STRING,
        allowNull:false
    },
    dire:{
        type:DataTypes.STRING,
        allowNull:false
    }
},{
    paranoid:true
});
// 设置外键--关联英雄表
const Hero=require('./Hero');
Hero_Type.hasMany(Hero);

module.exports = Hero_Type;

3)英雄表

/* 英雄表--id、编号、name、age、类型
   --所在班级作为外键--在英雄类型表进行设置*/
const seq = require('./db');
const { DataTypes } = require('sequelize');

// 生成表并导出
module.exports = seq.define("Hero", {
    number: {
        type: DataTypes.STRING,
        allowNull: false
    },
    name: {
        type: DataTypes.STRING,
        allowNull: false
    },
    age: {
        type: DataTypes.STRING,
        allowNull: false
    }
}, {
    paranoid: true
});

4)财富表

// money:id、金币、钻石、积分、点券
const seq=require('./db');
const { DataTypes }=require('sequelize');
   
module.exports = seq.define('Money',{
    gold:{
        type:DataTypes.STRING,
        allowNull:false
    },
    diamond:{
        type:DataTypes.STRING,
        allowNull:false
    },
    grade:{
        type:DataTypes.STRING,
        allowNull:false
    },
    coupon:{
        type:DataTypes.STRING,
        allowNull:false
    }
},{
    // freezeTableName:true,// 停止 Sequelize 执行自动复数化. 这样,Sequelize 将推断表名称等于模型名称
    paranoid:true
});
  • 4.以上创建的数据库的js表文件需要同步

在models文件夹下创建sync.js文件进行所有模块同步

// 需要同步的所有模型
require('./Admin');
require('./Hero_type');
require('./Hero');
require('./Money');

const seq=require('./db');
// 写法一:
// (async function(){
//     await seq.sync({alter:true});
//     console.log("所有模型同步完成");
// }());

// 写法二:
seq.sync({alter:true}).then(()=>{
    console.log("所有模型同步完成!");
});
  • 5.最后,通过node环境在数据库中创建表

返回到以上的index.js文件,在数据库连接成功的地方添加以下代码再去node环境中运行这个文件即可:

require("../models/sync");

打开数据库管理软件看看效果:

MySQL

!英雄类型表和英雄表是有关联的,注意检查model文件夹下的hero_type文件中是否设置了外键关联了英雄表。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值