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.如下图,我们检查一下安装的状态:
二、使用
按以上要求配置好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");
打开数据库管理软件看看效果:
!英雄类型表和英雄表是有关联的,注意检查model文件夹下的hero_type文件中是否设置了外键关联了英雄表。