在使用sequelize操作MySQL需要先做两件准备工作:
sequelize对象实例化
/*
* Sequelize实例化
*
* @Author: Junkai Chen
* @Date: 2017-10-30 19:11:39
* @Last Modified by: Junkai Chen
* @Last Modified time: 2017-11-13 16:10:15
*/
const Sequelize = require('sequelize');
const config = require('../config/db');
// 创建sequelize实例
const sequelize = new Sequelize(config.database, config.user, config.password, Object.assign(config.options, {
dialect: 'mysql',
pool: {
max: 5,
min: 0,
idle: 10000
}
}));
module.exports = sequelize;
定义模型
主要是告诉sequelize如何映射数据库表:
/*
* @Author: Junkai Chen
* @Date: 2017-11-13 15:06:40
* @Last Modified by: Gping
* @Last Modified time: 2017-11-15 16:26:49
*/
const Sequelize = require('sequelize');
const db = require('../db');
const Repository = db.define('repository', {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
allowNull: false
},
repository_id: {
field: 'repo_id',
type: Sequelize.STRING,
unique: true,
allowNull: false,
primaryKey: true,
},
document_name: {
field: 'doc_name',
type: Sequelize.STRING,
allowNull: false
},
description: {
type: Sequelize.STRING
},
repository_name: {
field: 'repo_name',
type: Sequelize.STRING,
allowNull: false
},
repository_url: {
field: 'repo_url',
type: Sequelize.STRING,
allowNull: false
},
delete_flag: {
type: Sequelize.INTEGER
},
index_filename: {
type: Sequelize.STRING
},
summary_filename: {
type: Sequelize.STRING
},
is_downloaded: {
type: Sequelize.INTEGER,
allowNull:false,
defaultValue: 0
},
create_time: {
type: Sequelize.TIME
},
update_time: {
type: Sequelize.TIME
}
}, {
createdAt: 'create_time',
updatedAt: 'update_time',
tableName: 'document_repo'
});
module.exports = Repository;
sequelize.define(modelName, attributes, [options]) -> Modal
这个实例方法用于定义一个新的model(模型)。model相当于数据库中的表,该对象不能通过构造函数实例化,而只能通过sequelize.define()
或者sequelize.import()
方法创建
第二个参数是指定列名和数据类型,如果是主键,需要更加详细的指定。第三个参数是额外的配置
接下来我们就可以往数据库中塞数据了
下面介绍几个常用的方法
create()——创建保存新实例
create(values, [options]) -> Promise.<Instance>
构建一个新的模型实例,并进行保存。与build()方法不同的是,此方法除了创建新实例外,还会将其保存到对应的数据库表中。
更新数据——save()方法
可以对查询到的实例调用save()方法
(async () => {
var p = await queryFromSomewhere();
p.gender = true;
p.updatedAt = Date.now();
p.version ++;
await p.save();
})();
destroy()——删除记录
destroy(options) -> Promise.<Integer>
删除多个实例,或设置deletedAt的时间为当前时间(当启用paranoid时候)
执行成功后返回被删除的行数
findAll()——查询多条数据
findAll([options]) -> Promise.<Array.<Instance>>
查询多个实例(多条数据)
下面是例子:
Model.findAll({
where: {
attr1: 42,
attr2: 'cake'
}
})
// WHERE attr1 = 42 AND attr2 = 'cake'
在查询中使用大于、小于等
Model.findAll({
where: {
attr1: {
$gt: 50
},
attr2: {
$lte: 45
},
attr3: {
$in: [1,2,3]
},
attr4: {
$ne: 5
}
}
})
// WHERE attr1 > 50 AND attr2 <= 45 AND attr3 IN (1,2,3) AND attr4 != 5
findOne()——通过单条数据
findById(id, [options]) -> Promise.<Instance>
查询单条实例(单条数据)。