一、从零模拟新浪微博-数据库操作
建表
users
column | dataType | pk主键 | nn不为空 | AI自动增加 | Default |
---|---|---|---|---|---|
id | int | Y | Y | Y | |
username | varchar(20) | Y | |||
password | varchar(20) | Y | |||
nickname | varchar(10) | Y |
blogs
column | dataType | pk主键 | nn不为空 | AI自动增加 | Default |
---|---|---|---|---|---|
id | int | Y | Y | Y | |
title | varchar(50) | Y | |||
content | text | Y | |||
userid | int | Y |
sequlize
安装插件
1 | yarn add mysql2 sequelize -d |
创建链接
1 | const Sequelise = require('sequelize') |
创建模型
单独用一个文件用于定义数据库模型。
1 | const Sequelize = require('sequelize') |
模型创建完成后使用同步功能将模型同步到数据库中。
1 | const seq = require('./seq') |
创建外键
场景:Blog表中的userId键是User表的id外键。
对于Sequelize
来说,有两种创建外键的方式。
1 | // 外键关联 第一种方式 |
插入数据
插入数据就是新建一条数据。
1 | const zhangsan = await User.create({ |
查询数据
查询单个数据
1
2
3
4
5
6
7
8
9const zhangsan = await User.findOne({
// 查询特定的列
attributes: ['userName', 'nickName'],
// 查询条件
where: {
userName: 'zhangsan'
}
})
console.log(zhangsan.dataValues)通过attributes属性可以限制只返回
userName
和nickName
字段的内容。查询列表
1
2
3
4
5
6
7
8
9
10
11// 查询一个列表
const zhangsanBlogList = await Blog.findAll({
where: {
userId: 1
},
order: [['id', 'desc']]
})
console.log(
'zhangsanBlogList',
zhangsanBlogList.map((blog) => blog.dataValues)
)通过
order
属性可以设置排序规则。分页查询
1
2
3
4
5
6
7
8
9
10
11
12const blogPageList = await Blog.findAll({
// 每次查询2条
limit: 2,
// 跳过0条
offset: 0,
// 倒序
order: [['id', 'desc']]
})
console.log(
'blogPageList',
blogPageList.map((blog) => blog.dataValues)
)查询总数
查询数据总量。
1
2
3
4
5
6
7
8
9
10
11
12
13
14const blogListAndCount = await Blog.findAndCountAll({
// 每次查询2条
limit: 2,
// 跳过0条
offset: 0,
// 倒序
order: [['id', 'desc']]
})
console.log(
'blogListAndCount',
blogListAndCount.count, // 所有的总数,不考虑分页
blogListAndCount.rows.map((blog) => blog.dataValues)
)连表查询
通过
belongsTo
定义外键可以使用如下方式进行连表查询。(通过微博查询发起人)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21const blogListWithUser = await Blog.findAndCountAll({
order: [['id', 'desc']],
include: [
{
model: User,
attributes: ['userName', 'nickName'],
where: {
userName: 'zhangsan'
}
}
]
})
console.log(
'blogListWithUser',
blogListWithUser.count,
blogListWithUser.rows.map((blog) => {
const blogVal = blog.dataValues
blogVal.user = blogVal.user.dataValues
return blogVal
})
)连表查询
通过
hasMany
定义外键可以使用如下方式进行查询(通过用户名查询发过的微博)1
2
3
4
5
6
7
8
9
10
11
12
13const userListWithBlog = await User.findAndCountAll({
attributes: ['userName', 'nickName'],
include: [{ model: Blog }]
})
console.log(
'userListWithBlog',
userListWithBlog.count,
userListWithBlog.rows.map((user) => {
const userVal = user.dataValues
userVal.blogs = userVal.blogs.map((blog) => blog.dataValues)
return userVal
})
)
修改数据
1 | // update 传入两个参数 |
返回结果为一个数组,元素为修改的行数。1表示修改了一行
删除数据
1 | const delBlogRes = await Blog.destroy({ |
连接池
设置连接池只需要在创建链接的配置中填入pool
配置即可
1 | // 连接池 |
redis
安装
1 | yarn add redis -d |
redis相关操作
1 | /** |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小康博客!
评论
TwikooWaline