- 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)
})