持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
大家可以前往 Sequelize中文文档,查看 Sequelize不同版本【5.x、4.x】的文档
本文档分多个篇章,难易程度从低到高,学习此篇章之前,务必确保自己已经掌握 node.js、express、es6语法、mysql等关系型数据库的sql语法等
单表增删改查
需求:新建users表,并设置username、gender、age、headImg字段
对应数据库显示结构
Model
import {Sequelize, DataTypes} from 'sequelize'
import sequelize from './../connection'
const User = sequelize.define('user', {
username: DataTypes.STRING,
gender: {
type: DataTypes.INTEGER,
defaultValue: 1,//默认值
},
age: {
type: DataTypes.INTEGER,
defaultValue: 20
},
headImg: {
type: DataTypes.STRING,
defaultValue: 'img.png'
}
});
User.sync({force: true}).then(d=> { //建议在表模型设计完成后,打开此段代码,待数据库中表建立完成后,注释掉此段,防止每次都删除并重新建表
console.log('强制清空users表并根据模型新建');
});
export default User
Controller
在写操作代码在之前,因为
Sequelize
是一个基于promise
的Node.js ORM
,所以咱们可以用es6的async/await
实现异步转同步,在使用async/await
之前需要进行如下配置
$ npm install babel-plugin-transform-runtime --save-dev
在 .babelrc 文件中添加
"plugins": ["transform-runtime"]
增加数据
User.Controller.js
import User from './../Model/User.Model'
export default {
insertUser: async (req, res, next) => {
let {username} = req.body;
//新增单个数据 方法一
let user = await User.build({
username
});
user = await user.save();
//新增单个数据 方法二
let user = await User.create({
username
});
// 新增多条数据
let result = await User.bulkCreate([{username: '张三'}, {username: '李四'}]);
//插入成功后返回
res.send({
code: 200,
data: user
})
}
}
post.js【配置的post请求的路由文件】
import express from 'express'
const router = express.Router();
import User from '../Mysql/Controller/User.Controller'
router.post('/insert', User.insertUser);//调用User中Controller的方法
module.exports = router;
postman测试返回数据
//新增数据成功
{
"code": 200,
"data": {
"gender": 1,//设置的默认值
"age": 20,//设置的默认值
"headImg": "img.png",//设置的默认值
"id": 2,
"username": "Mjhuu",
"updatedAt": "2019-07-09T06:19:31.760Z",
"createdAt": "2019-07-09T06:19:31.760Z"
}
}
修改数据
User.Controller.js
import User from './../Model/User.Model'
export default {
updateUser: async (req, res, next)=>{
let {id, age} = req.body;
let user = await User.findOne({
where: {id}
});
// 修改单个数据 方法一
user.age = age; //此过程不会直接修改数据库
user = await user.save();//调用save保存到数据库
// 修改单个数据 方法二直接调用update修改
user = await user.update({age, username: '我不会被修改'},{'fields': ['age']});//配置修改白名单,只会修改age字段
// 修改多条数据
let users = await User.update({
age: 34
}, {
where: {
gender: 1
}
});
res.send({
code: 200,
data: '修改成功',
updateUser: user
})
}
}
post.js
router.post('/update', User.updateUser);
postman
{
"code": 200,
"data": "修改成功",
"updateUser": {
"id": 1,
"username": "Mjhu",
"gender": 1,
"age": "19",
"headImg": "img.png",
"createdAt": "2019-07-09T05:13:38.000Z",
"updatedAt": "2019-07-09T11:13:48.025Z"
}
}
删除数据
User.Controller.js
import User from './../Model/User.Model'
export default {
deleteUser: async (req, res, next)=>{
let {id} = req.body;
// 方法一:先查后删
let user = await User.findOne({
where: {id}
});
user = await user.destroy();
// 方法二:直接删【查出多少删除多少】
let user = await User.destroy({
where: {
id: id
}
});
res.send({
code: 200,
data: '注销成功',
deleteUser: user
})
}
}
post.js
router.post('/delete', User.deleteUser);
postman
{
"code": 200,
"data": "注销成功",
"deleteUser": {
"id": 2,
"username": "Mjhuu",
"gender": 1,
"age": 20,
"headImg": "img.png",
"createdAt": "2019-07-09T06:19:31.000Z",
"updatedAt": "2019-07-09T06:19:31.000Z"
}
}
查询数据
查询所有数据 findAll
User.Controller.js
import User from './../Model/User.Model'
export default {
getUserInfo: async (req, res, next)=>{
let users = await User.findAll({
attributes: ['username', 'age', ['gender', 'sex']] //限制显示的字段 将gender字段修改为sex显示
});
res.send({
code: 200,
users
})
}
}
get.js
router.get('/getUserInfo', User.getUserInfo);
postman
{
"code": 200,
"users": [
{
"username": "Mjhu",
"age": 16,
"sex": 1
},
{
"username": "张三",
"age": 20,
"sex": 1
}
]
}