ORM之Sequelize操作MySQL

  • Sequelize
    • 基于Promise的ORM
    • 用于操作MySQL,Postgres,SQLite,sqlserver等关系型数据库
    • 所有的结果集都是Promsie对象,不能直接读取结果
    • 连接数据库初始化时,会创建连接池,该池会创建和管理一个连接和缓冲技术
  • 定义模型
    • sequelize.define('name', {attributes}, {options}) 定义表结构得到User对象
      • User.sync() 创建表
      • User.create() 添加数据,User.findOne() 查找数据

依赖包 sequelize mysql2

  • 数据库连接
// db.js

var Sequelize = require('sequelize')

// 入口主类
var sequelize = new Sequelize('node_sequelize', 'root', null, {
    host: 'localhost',
    dialect: 'mysql',
    pool: {
        // 连接池中最大连接数量
        max: 5,
        min: 0,
        // 单位毫秒,如果一个线程10秒内没有被使用,释放线程
        idle: 10000
    }
})

// 通过uri连接数据库
var sequelize = new Sequelize('mysql://localhost:3306/node_sequelize', {
    dialect: 'mysql',
    useranme: 'root',
    password: ''
})

module.exports = new Sequelize('node_sequelize', 'root', null, {
    host: '127.0.0.1',
    dialect: 'mysql',
	// 关闭废弃别名操作提示
	operatorsAliases: false,

    pool: {
        max: 5,
        min: 0,
        idle: 10000
    }
})
  • 模型
// user.js

var Sequelize = require('sequelize')
var sequelize = require('./db')

// 创建表结构模型
var User = sequelize.define('user', {
    userName: {
        // 数据类型
        type: Sequelize.STRING,
        // 建立键与数据表中的字段映射关系
        field: 'user_name'
    },
    email: {
        // 未指定field字段,则键名与存储表中字段一致
        type: Sequelize.STRING
    }
}, {
    // 如果为true,则表名称和model相同,即为user
    // 为false,mysql创建的表名称会是复数users
    // 若指定的表名称本身是复数,则不变
    freezeTableName: false
})

// 创建表,返回一个Promise对象
// force=true 如果表已经存在,将会丢弃表
// 默认情况下为false
var user = User.sync({
    force: false
})

// 添加新用户
exports.addUser = function (userName, email) {
    // 向user表中添加数据
    return User.create({
        userName,
        email
    })
}

// 通过用户名查找用户
exports.findByName = function (userName) {
    return User.findOne({
        where: {
            userName
        }
    })
}
  • 测试
// testUser.js

var user = require('./user')

// 添加用户
user.addUser('jack', 'jack@163.com').then(function () {
    // 查询新添加的用户
    return user.findByName('jack')
}).then(function (user) {
    console.log('***********')
    console.log('user name: ', user.userName)
    console.log('user email: ', user.email)
})
上一篇:全栈项目|小书架|服务器端-NodeJS+Koa2实现首页图书列表接口


下一篇:Databases - SQL