Sequelize 操作 MySQL 数据库(模型增删改)

74 阅读1分钟

新增数据 / 初始化

const adminModel = require("./model/adminModel")

// 新增方法1 build + save
// 同步方法 创建一个实例
const instance = adminModel.build({
    loginId: '123',
    loginPwd: '123'
});
instance.loginId = 'asd';
instance.save() // 某一个数据实例在 save 之后才可以保存 返回一个 Promise
// 在数据库中查找(获取)一条数据,也是指获取一个数据实例,这个数据实例上有若干方法,比如save
// instance.toJSON()  // 会将实例转为一个 json  对象

// 新增方法2 create
adminModel.create({
    loginId: 'admin',
    name: '超级管理员',
})

项目实践(以添加文章为例):

省略业务细节,重点学习业务架构

app.js

const express = require('express');
const blogRouter = require('./routes/blog');
const app = express();
app.use('/api/blog', blogRouter);

blog.js

const router = express.Router();

// 添加文章
router.post('/', async function (req, res, next) {
    // console.log(req.body)
    res.send(await addBlogService(req.body))
})

blogService.js

// 添加文章
module.exports.addBlogService = async (newBlogInfo) => {
    // ...
    const data = await addBlogDao(newBlogInfo);
    return formatResponse(0, '', data);
}

blogDao.js

// 添加文章
module.exports.addBlogDao = async function (newBlogInfo) {
    // ...
    const result = await blogModel.create(newBlogInfo);
    return result.dataValues
}

blogModel.js

const {DataTypes} = require("sequelize")
const sequelize = require("../dbConnect")
// 定义数据表
module.exports = sequelize.define("blog", {
    // id 自动生成 无需手动定义
    title: {
        type: DataTypes.STRING,
        allowNull: false,
    },
    description: {
        type: DataTypes.TEXT,
        allowNull: false,
    },
    // ...
}, {
    freezeTableName: true, // 禁止默认的自动复数化
    createdAt: false, // 关闭默认字段
    updatedAt: false // 关闭默认字段
})

删除数据

// 删除文章
// 方法一:
module.exports.deleteBlogDao = async function (id) {
    return await blogModel.destroy({
        where: {
            id
        }
    })
}

// 方法二:
const instance = await blogModel.findByPk(id);
await instance.destroy();

修改数据

// 修改文章
// 方法一:
module.exports.updateBlogDao = async function (id, newBlogInfo) {
    await blogModel.update(newBlogInfo, {
        where: {
            id
        }
    })
    return await blogModel.findByPk(id)
}

// 方法二:
const instance = await blogModel.finByPk(id);
instance.title = newBlogInfo.title;
instance.save()