在Node中sequelize增删改查及链表
欢迎点击: 个人官网博客
1.创建并连接mysql数据库
先npm 下载sequelize以及mysql2
const {
Sequelize } = require('sequelize');
var sequelize = new Sequelize(//创建数据库
'testdemo', // 数据库名
'root', // 用户名
'root', // 用户密码
{
'dialect': 'mysql', // 数据库使用mysql
'host': 'localhost', // 数据库服务器ip
'port': 3306, // 数据库服务器端口
'define': {
// 字段以下划线(_)来分割(默认是驼峰命名风格)
'underscored': true,
' charset ': 'utf8',
' collate': 'utf8_general_ci',
' freezeTableName': true,
' timestamps': true, //为模型添加 createdAt 和 updatedAt 两个时间戳字段
},
' pool': {
//连接池
'maxConnections': 20,
' minConnections': 0,
' maxIdleTime': 10000 // 连接最大空置时间(毫秒),超时后将释放连接
},
}
);
sequelize.authenticate()//建立连接
.then(() => {
console.log('连接成功');
})
.catch(err => {
console.log(err);
})
module.exports= sequelize
2.创建表(模型)
let sequelize = require('../index')//这里是上面导出的刚创建的数据库testdemo
const {
Sequelize } = require('sequelize');
const Op = Sequelize.Op//用于下面的模糊查询等复杂操作
// 在testdemo数据库中创建表( model)
const User = sequelize.define('user', {
userName: {
type: Sequelize.STRING, // 指定值的类型
field: 'user_name' // 指定存储在表中的键名称
},
// 没有指定 field,表中键名称则与对象键名相同,为 email
email: {
type: Sequelize.STRING
},
infoid: {
type: Sequelize.STRING, // 指定值的类型
},
}, {
// 如果为 true 则表的名称和 model 相同,即 user
// 为 false MySQL创建的表名称会是复数 users
// 如果指定的表名称本就是复数形式则不变
freezeTableName: false
});
3.在User 表(模型)中增删改查,模糊查询
// 添加数据
exports.addUser = function (userName, email) {
// 向 user 表中插入数据
return sequelize.sync()
.then(() => User.create({
userName: userName,
email: email
}))
.then(jane => {
console.log(jane.toJSON());
});
};
// 查询数据
exports.findUser = async function () {
// findAndCountAll() 数量
//findOrCreate() 找不到就创造
//findByPk(id) 找id,主键
// return await User.findOne({
// where: {
// id: 1
// }
// }).then(res=>{
// console.log(res)
// })
return await User.findAll({
// where: {
// id: 1
// },
// 如果忽略方向,则默认升序,这里降序
order: [['id', 'DESC']],
// offset: 2, limit: 5 //分业
}).then(users => {
// console.log(JSON.stringify(users, null, 4));
return JSON.stringify(users, null, 4)
});
};
// 更新数据
exports.updeteUser = async function () {
return await User.update({
email: '[email protected]' }, {
where: {
id: 6
}
}).then(res => {
console.log(res)
})
};
//删除数据
exports.deleteUser = async function () {
// 或者可以先find()再.destroy()
return await User.destroy({
where: {
id: 3
}
}).then(res => {
console.log(res)
})
};
//模糊查询
exports.findLike = async function () {
let title = 'a'
return await User.findAll({
where: {
email: {
[Op.like]: '%' + title + '%'
}
}
}).then(users => {
// console.log(JSON.stringify(users, null, 4));
return JSON.stringify(users)
});
};
4.链表
// 创建 model
const User = sequelize.define('user', {
userName: {
type: Sequelize.STRING,
field: 'user_name'
},
email: {
type: Sequelize.STRING
},
infoid: {
type: Sequelize.STRING,
},
}, {
freezeTableName: false
});
const Userinfo = sequelize.define('userinfo', {
nameid: {
type: Sequelize.STRING,
},
qq: {
type: Sequelize.STRING
}
}, {
freezeTableName: false
});
关键来了
//链表查询
User.hasMany(Userinfo, {
foreignKey: 'nameid', targetKey: 'infoid' , as: 'Instruments' })
exports.innerJoin = async function () {
return await User.findAll({
where: {
user_name: '小王'
},
include: [
{
model: Userinfo,
as: 'Instruments'
}
]
}).then(users => {
return JSON.stringify(users)
});
};
查询到如下
这是express的demo代码
const express = require('express')
const {
addUser,findUser,updeteUser,deleteUser,findLike,innerJoin,addUserinfo} =require('./model/user/user')
const app = express();
app.get('/',async (req, res) => {
// addUser('hh','youai')
let data= await innerJoin()
// let data= await findLike()
// updeteUser()
// deleteUser()
res.send(data)
})
app.listen(3000, () => {
console.log('3000启动了')
})