持久化 :将内存中的对象保存到磁盘的数据库中或其他文件中
| 类 | 表 |
|---|---|
| 类的属性 | 表的列 |
| 类的对象 | 表的行 |
在js程序中对对象的操作,就是操作了数据库表的行.
npm install mysql2
npm install sequelize
创建数据库连接的配置对象:使用sequelize完成相关配置
使用sequelize建立模型(类),该模型实现与数据表的orm映射
| 方法 | 说明 |
|---|---|
| 模型名.findAll() | 查询所有 |
| 模型名.findOne() | 带条件查询 |
| 模型名.create() | 插入数据 |
| 模型名.destory() | 删除数据 |
| 模型名.update() | 更新数据 |
seqconfig.js后端配置文件:
//1、导入sequelize模块,引入框架
const Sequelize = require('sequelize')
//2、配置数据库连接对象
const mysqlDemo = new Sequelize('xy','root','123456',{
host:'localhost',
port:3306,
dialect:'mysql',//数据库方言,类型
pool:{//数据库连接池
max:10,
min:3,
idle:100000
}
})
//3、导出数据库连接的配置对象
module.exports = mysqlDemo
Student.js映射数据库关系表的代码如下:
//1、导入sequelize模块
const Sequelize = require('sequelize')
//2、导入配置文件
const mysqlDemo =require('../seqconfig')
//3、创建数据类型(模型)
const Student = mysqlDemo.define('stu',{
Id:{
type:Sequelize.STRING,//数据类型
primaryKey:true,//主键
field:'sid'
},
Name:{
type:Sequelize.STRING,
field:'sname',
allowNull:false//该列不能为空(false),true表示可以为空
},
Age:{
type:Sequelize.INTEGER,
field:'age',
allowNull:false//该列不能为空(false),true表示可以为空
},
Gender:{
type:Sequelize.STRING,
field:'gender',
allowNull:false//该列不能为空(false),true表示可以为空
}
},
{
freezeTableName:true,//true表示应用用户自己的表名,false(默认)表示sequelize定义表名(就是模型名后面加s:Students)
timestamps:false//默认为true(会给表添加时间戳列,创建表的时间戳,更新表的时间戳两列),false表示不添加时间戳列。
})
module.exports = Student//导出这个数据库模型(表)
sequecrud.js路由接口文件代码如下:
const express = require('express')
const sequelize = require('sequelize')
const router = express.Router()
const Student =require('../config/model/Student')
//测试Sequelize模块
//http://localhost:3000/sequelize/seq
router.get('/seq',(req, res) => {
Student.findAll({
raw:true//目的是不显示时间戳
}).then(function(result){
res.send(result)
})
})
module.exports=router
app.js配置代码:
var seqRouter=require('./routes/sequecrud')
app.use('/sequelize',seqRouter);
运行结果如下:
测试结果如下(查询全部数据):


只修改sequecrud.js路由接口文件关键代码,其余代码同上:
//http://localhost:3000/sequelize/findone
router.get('/findone',(req, res) => {
Student.findOne({
where:{
Id:'S_1013'
}
}).then((data)=>{
res.send(data)
})
})
运行结果如下:
测试结果如下:
正如下图证明可得,查询结果正确。

只修改sequecrud.js路由接口文件关键代码,其余代码同上:
//http://localhost:3000/sequelize/add
router.get('/add',(req, res) => {
Student.create({
Id:'S_1012',
Name:'小王',
Age:'21',
Gender:'男'
}).then((data)=>{
res.send(data)
})
})
运行结果如下:
测试结果如下:

如下图查询数据库表知,插入数据成功:

只修改sequecrud.js路由接口文件关键代码,其余代码同上:
//http://localhost:3000/sequelize/delete
router.get('/delete',(req, res) => {
Student.destroy({
where:{
Id:'S_1012'
}
}).then((data)=>{
res.send(data)
})
})
运行结果如下:
数据已被删除如下图所示:

只修改sequecrud.js路由接口文件关键代码,其余代码同上:
//http://localhost:3000/sequelize/update
router.get('/update',(req, res) => {
Student.findOne({
where:{
Id:'s_1007'
}
}).then((Student)=>{
Student.update({
Name:'更新后',
Age:16,
Gender:'男'
}).then((data)=>{
res.send(data)
})
})
})
运行结果如下:

更新结果应如红框所示:
测试结果:

例如:select sname from stu;的实现方式
也只修改sequecrud.js路由接口文件关键代码,其余代码同上:
//http://localhost:3000/sequelize/seq
router.get('/seq',(req, res) => {
Student.findAll({
attributes:['sname','sid'],//查询部分字段
raw:true//目的是不显示时间戳
}).then(function(result){
res.send(result)
})
})
运行结果:

attributes:[[sequelize.fn(‘count’,sequelize.col(‘sid’)),‘记录总数’]],
也只修改sequecrud.js路由接口文件关键代码,其余代码同上:
//http://localhost:3000/sequelize/seq
router.get('/seq',(req, res) => {
Student.findAll({
attributes:[[sequelize.fn('count',sequelize.col('sid')),'记录总数']],
raw:true//目的是不显示时间戳
}).then(function(result){
res.send(result)
})
})
运行结果:

也只修改sequecrud.js路由接口文件关键代码,其余代码同上:
const Op =sequelize.Op
//测试Sequelize模块
//http://localhost:3000/sequelize/seq
router.get('/seq',(req, res) => {
Student.findAll({
// attributes:['sname','sid'],//查询部分字段
// attributes:[[sequelize.fn('count',sequelize.col('sid')),'记录总数']],
where : {
sname: {
[Op.like]: '李%'
}
},
raw:true//目的是不显示时间戳
}).then(function(result){
res.send(result)
})
})
查询结果应如红框所示:

测试结果:
也只修改sequecrud.js路由接口文件关键代码,其余代码同上:
const Op =sequelize.Op
//测试Sequelize模块
//http://localhost:3000/sequelize/seq
router.get('/seq',(req, res) => {
Student.findAll({
// attributes:['sname','sid'],//查询部分字段
// attributes:[[sequelize.fn('count',sequelize.col('sid')),'记录总数']],
where : {
age:{
[Op.in]:[15,22]
}
},
raw:true//目的是不显示时间戳
}).then(function(result){
res.send(result)
})
})
查询结果应如红框所示:

测试结果:

也只修改sequecrud.js路由接口文件关键代码,其余代码同上:
const Op =sequelize.Op
//http://localhost:3000/sequelize/seq
router.get('/seq',(req, res) => {
Student.findAll({
where : {
age:{
[Op.between]:[15,22]
}
},
raw:true//目的是不显示时间戳
}).then(function(result){
res.send(result)
})
})
查询结果应如红框所示:

测试结果:

也只修改sequecrud.js路由接口文件关键代码,其余代码同上:
const Op =sequelize.Op
//测试Sequelize模块
//http://localhost:3000/sequelize/seq
router.get('/seq',(req, res) => {
Student.findAll({
where : {
[Op.and]:[
{
sname:{
[Op.like]:'李%'
}
},
{
age:{
[Op.eq]:22
}
}
]
},
raw:true//目的是不显示时间戳
}).then(function(result){
res.send(result)
})
})
查询结果应如红框所示:

测试结果:

也只修改sequecrud.js路由接口文件关键代码,其余代码同上:
//测试Sequelize模块
//http://localhost:3000/sequelize/seq
router.get('/seq',(req, res) => {
Student.findAll({
order:[
['age','desc']
],
raw:true//目的是不显示时间戳
}).then(function(result){
res.send(result)
})
})
测试结果:

//测试Sequelize模块
//http://localhost:3000/sequelize/seq
router.get('/seq',(req, res) => {
Student.findAll({
limit:2,
offset:3,
raw:true//目的是不显示时间戳
}).then(function(result){
res.send(result)
})
})
查询结果应如红框所示:

测试结果:
