Nodejs开发,ORM框架Sequelize

一、什么是ORM

对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 这也同时暗示着额外的执行开销;然而,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。 更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG规范的对象数据库依然需要类级别的元数据。

ORM 技术是在对象和数据库之间提供了一条桥梁,前台的对象型数据和数据库中的关系型的数据通过这个桥梁来相互转化。

不同的编程语言,有不同的ORM框架。例如Java,它的ORM框架就有:Hibernate,Ibatis/Mybatis等等。在Node Web开发中,Sequelize 就是一款比较流行的 ORM 框架。

二、安装相关插件

  • npm i sequelize mysql2 -d

三、Sequelize的使用

1. 创建连接对象, 并模块化
/* seq.js */
const Sequelize = require('sequelize')

const conf = {
    host: 'localhost',
    dialect: 'mysql'
}

const seq = new Sequelize('koa2_weibo_db', 'root', '1233456', conf)

module.exports = seq
2. 定义数据表结构
/* model.js */
const Sequelize = require('sequelize')
const seq = require('./seq')

// 创建 User 模型,数据表的名字是users
const User = seq.define('user', {
    // id会自动创建,并设为主键、自增
    userName: {
        type: Sequelize.STRING,  // varchar(255)
        allowNull: false
    },
    password: {
        type: Sequelize.STRING,
        allowNull: false
    },
    nickName: {
        type: Sequelize.STRING,
        comment: '昵称'  // 注释
    }
    // 会自动创建 createdAt 和 updatedAt
})

// 创建 Blog 模型
const Blog = seq.define('blog', {
    title: {
        type: Sequelize.STRING,
        allowNull: false
    },
    content: {
        type: Sequelize.STRING,
        allowNull: false
    },
    userId: {
        type: Sequelize.INTEGER,
        allowNull: false
    }
})

// 外键关联
Blog.belongsTo(User, {
    // 创建外键 Blog.userId -> User.id
    foreignKey: 'userId'
})
User.hasMany(Blog, {
    // 创建外键 Blog.userId -> User.id
    foreignKey: 'userId'
})

module.exports = {
    User,
    Blog
}
3. 同步数据表结构
/* sync.js */
const seq = require('./seq')
require('./model')

// 测试连接
seq.authenticate().then(() => {
    console.log('ok')
}).catch(() => {
    console.log('err')
})

// 同步表结构
seq.sync({
    force: true  // 强制同步,先删除表,然后新建
}).then(() => {
    console.log('sync ok')
    process.exit()
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值