从杭州回到小县城工作,新入职公司的接手第一个项目是 react + umi + egg + Sequelize,迫使自己向全栈的方向发展。由于下周要修改后端的东西,特地记录一下学习 Sequelize 的历程。
备注:此篇文章的所有代码内容基本都是跟着中文官网逻辑思路实现的,可以理解为照读官网内容,但是一些细节化的内容还需要自行官网查询。
Sequelize 提供的大多数方法都是异步的
Sequelize 中文官网传送门
安装 Sequelize
// 首先初始化 node 项目
npm init
// 下载 Sequelize 依赖包
yarn add sequelize
// 下载数据库驱动程序,这里根据实际情况选择,详见官网
yarn add mysql2
入门
const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize('sequelize', 'root', 'root', {
dialect: 'mysql', // 选用数据库的类型
timezone: '+08:00',
logging: false, // 禁止控制台输出 sql
})
// 判断是否成功链接数据库
sequelize.authenticate().then(() => {
console.log('connection success');
}).catch(() => {
console.log('error!')
})
模型基础
const User = sequelize.define('User', {
name: DataTypes.TEXT,
favoriteColor: {
type: DataTypes.TEXT,
defaultValue: 'green'
},
age: DataTypes.INTEGER,
cash: DataTypes.INTEGER,
}, {
// freezeTableName: true, // 强制表名称等于模型名称,默认状态下是模型名的复数形式
// timestamps: false, // 不要 createdAt & updatedAt 时间戳
// tableName: 'customerTableName', // 自定义表名
})
// 空: 不存在表则创建表
// force: true 删除表再建立表
// alter: true 对比表结构和模型结构,并与之对应修改
User.sync({force: true}).then(data => {
console.log('create table success');
updateData();
// destoryData();
// reloadData();
}).catch(err => {
console.log('create table fail')
})
模型实例
// A.更新实例
async function updateData() {
// const jane = User.build({name: 'Jane'});
// jane.save();
// create 方法包括了 build 和 save
const jane = await User.create({
name: 'jane'
});
// 1.单个字段更新
// jane.name = 'zhangsan';
// jane.save();
// 2.多个字段更新
// jane.name = 'zhangsan';
// jane.set({
// favoriteColor: 'blue',
// age: 28
// })
// save 方法会更新不止 set 的字段,其他修改也会更新
// await jane.save();
// 3.更新特定一组字段
// jane.age = 28;
// await jane.update({
// name: 'lisi',
// favoriteColor: 'yellow'
// })
// await jane.save();
// 4.仅更新指定字段
// jane.name = 'zhangsan';
// jane.favoriteColor = 'yellow';
// await jane.save({fields: ['name']});
// console.log(jane.name);
// console.log(jane.favoriteColor);
// await jane.reload();
// console.log(jane.name);
// console.log(jane.favoriteColor);
// 5.整数值自增或自减
jane.age = 18;
jane.cash = 2000;
await jane.save();
// 5.1 单个字段自增
const singleData = await jane.increment('age', {by: 2}); // 5.1.a 如果自增 1 的话 可以省略 {by: 2}
console.log(singleData.toJSON());
// 5.2 多个字段自增
const multipleData = await jane.increment(['age', 'cash'], {by: 20});
console.log(multipleData.toJSON());
const sqlData = await jane.reload();
console.log(sqlData.toJSON());
}
// B.删除实例
async function destoryData() {
const jane = await User.create({name: 'jane'});
await jane.destroy();
}
// C.重载实例
async function reloadData() {
const jane = await User.create({name: 'jane'});
console.log(jane.name);
jane.name = 'zhangsan';
await jane.reload();
console.log(jane.name);
}
未完...