1. 本地启动mysql,新建test数据库、user表:
2. 新建项目 sequelize-demo:
3. 安装:
npm install sequelize mysql2 --save
4. app.js 代码:
(async function () {
const Sequelize = require('sequelize'); // 1、引入模块
const sequelize = new Sequelize('test', 'root', '123456', { // 2、连接数据库
host: '127.0.0.1',
port: '3306',
dialect: 'mysql',
timezone: 'Asia/Shanghai', // 设置 时区
});
sequelize.authenticate().then(() => { // 3、 测试方式一:连接数据库是否成功
console.log('link success');
}).catch(err => {
console.log('link err')
})
// 测试方式二:连接数据库是否成功
// try {
// sequelize.authenticate();
// console.log('连接成功');
// } catch(e) {
// console.log('连接失败');
// };
// 4、 创建数据表模型 user -> 定义数据结构 及 表信息
const UserModel = sequelize.define('User', {
id: {
type: Sequelize.INTEGER(10), // 数据类型
allowNull: false, // 是否为 null
primaryKey: true, // 是否为 主键
autoIncrement: true // 是否 自动填值
},
username: {
type: Sequelize.STRING(255),
allowNull: false,
defaultValue: '' // 默认值
},
age: {
type: Sequelize.TINYINT,
allowNull: false,
defaultValue: 0
},
gender: {
type: Sequelize.ENUM(['男', '女']),
allowNull: false,
defaultValue: '男'
}
}, { // 定义 表信息
timestamps: false, // 是否 自动添加数据的 创建、更新 时间戳
paranoid: false, // 是否 硬删除数据
freezeTableName: true, // 是否 冻结表名,false 访问 users表
tableName: 'user', // 访问数据库 user 表
indexes: [ // 设置 索引
{
name: 'uname',
fields: ['username']
},
{
name: 'age',
fields: ['age']
}
]
});
/**
* 1. 新建数据
*/
let Kimoo = UserModel.build({ // 新建一条user数据
username: 'Kimoo',
age: 30,
gender: '男'
})
await Kimoo.save(); // 必须 保存 -> 同步到数据库
/**
* 2. 数据 -> 查询、修改、更新、删除
*/
// let u1 = await UserModel.findByPK(1);
// console.log(u1)
// let u2 = await UserModel.findById(2);
// console.log(u2)
// u2.set('age', 31); // 修改
// await u2.save();
// await u2.update({ // 更新 update == set + save
// age: 32
// });
// u2.destroy(); // 删除
/**
* 3. fineOne -> 条件查询
*/
let rs1 = await UserModel.findOne({
where: {
username: '李四'
}
});
console.log(rs1.dataValues)
/**
* 4. findAll -> 查询
*/
let rs2 = await UserModel.findAll();
// console.log(rs2)
rs2.forEach(element => {
console.log(element.dataValues)
});
/**
* 5. 条件查询: age >= 30
*/
let rs3 = await UserModel.findAll({
where: {
age: {
[Sequelize.Op.gte]: 30
}
}
})
rs3.forEach(element => {
console.log(element.dataValues)
});
/**
* 6. 条件查询: age >= 30 或者 gender = '女'
*/
let rs4 = await UserModel.findAll({
where: {
[Sequelize.Op.or]: [
{
age: {
[Sequelize.Op.lte]: 30
}
}, {
gender: '女'
}
]
}
})
rs4.forEach(element => {
console.log(element.dataValues)
});
/**
* 7. 限制查询 -> limit、offset
*/
let rs5 = await UserModel.findAll({
limit: 2
})
rs5.forEach(element => {
console.log(element.dataValues)
});
let rs6 = await UserModel.findAll({
offset: 2,
limit: 3
})
console.log(rs6.map(r => r.get('username')));
/**
* 8. 排序查询 -> order
*/
let rs7 = await UserModel.findAll({
order: [
['age', 'desc']
]
})
rs7.forEach(element => {
console.log(element.dataValues)
});
/**
* 8. 函数查询 -> count、sum
*/
let rs8 = await UserModel.count()
console.log(rs8)
let rs9 = await UserModel.findAndCountAll({
limit: 3
})
console.log(rs9);
let rs10 = await UserModel.sum('age', {
where: {
gender: '男'
}
})
console.log(rs10)
})()
// 启动:node app
5. 文档:
1. 英文 文档
https://sequelize.org/
2. 中文 文档
https://github.com/demopark/sequelize-docs-Zh-CN