Sequelize视频教程_Eggjs仿小米商城企业级Nodejs项目实战视频教程: https://www.itying.com/goods-941.html

一、Sequelize简介

前面的章节中,我们介绍了如何在框架中通过 egg-mysql 插件来访问数据库。而在一些较为复杂的应用中,我们可能会需要一个 ORM 框架来帮助我们管理数据层的代码。而在 Node.js 社区中,sequelize 是一个广泛使用的 ORM 框架,它支持 MySQL、SQLite 和 MSSQL 、PostgreSQL等多个数据源。下面我们主要给大家讲讲sequelize 结合MySQL的使用。

相关文档:

二、Sequelize 操作Mysql数据库

1、安装egg-sequelize以及mysql2

npm install --save egg-sequelize mysql2

2、在 config/plugin.js 中引入 egg-sequelize 插件

exports.sequelize = {

enable: true,

package: 'egg-sequelize',

};

3、 在 config/config.default.js 中编写 sequelize 配置

config.sequelize = {

dialect: 'mysql',

host: '127.0.0.1',

port: 3306,

database: 'test',

username:"root",

password:"123456"

};

三、Sequelize 操作Mysql实现增删改查

1、在app/model/ 目录下编写数据库Model,以用户表user为例

'use strict';

module.exports = app => {

const { STRING, INTEGER, DATE } = app.Sequelize;

const User = app.model.define('user', {

id: { type: INTEGER, primaryKey: true, autoIncrement: true },

name: STRING(30),

age: INTEGER,

created_at: DATE,

updated_at: DATE,

});

return User;

};

或者

'use strict';

module.exports = app => {

const { STRING, INTEGER, DATE } = app.Sequelize;

const User = app.model.define('user', {

id: { type: INTEGER, primaryKey: true, autoIncrement: true },

name: STRING(30),

age: INTEGER,

created_at: DATE,

updated_at: DATE,

},{

timestamps: false, //自动增加创建时间

tableName: 'user_info' //设置表名称

});

return User;

};

2、定义controller实现数据库的增删改查

async index() {

const ctx = this.ctx;

ctx.body = await ctx.model.User.findAll({limit: 10, offset: 0,order:[["id","desc"]]});

//指定返回的字段

//ctx.body = await ctx.model.User.findAll({attributes: ['id', 'name'],limit: 10,order:[["id","desc"]]});

}

async findOne() {

const ctx = this.ctx;

var result = await ctx.model.User.findByPk(106);

ctx.body=result || '';

}

async create() {

const ctx = this.ctx;

const user = await ctx.model.User.create({ name:"张三", age:20 });

ctx.status = 201;

ctx.body = user;

}

async update() {

const ctx = this.ctx;

const id = 106;

const user = await ctx.model.User.findByPk(id);

if (!user) {

ctx.status = 404;

return;

}

await user.update({ name:"李四", age:43 });

ctx.body = user;

}

async destroy() {

const ctx = this.ctx;

const id = 213;

const user = await ctx.model.User.findByPk(id);

if (!user) {

ctx.status = 404;

return;

}

await user.destroy();

ctx.status = 200;

ctx.body="删除成功";

}

四、Sequelize 操作多表关联查询

4.1、1对1 hasOne 或者 belongsTo

ArticleCate.associate = function (){

// 1对1

app.model.ArticleCate.hasOne(app.model.Article, {foreignKey: 'cateId'});

}

查询语句

const { ctx } = this;

let result = await ctx.model.ArticleCate.findAll({

include: {

model: ctx.model.Article

}

});Article.associate = function (){

// 1对1

app.model.Article.belongsTo(app.model.ArticleCate, {foreignKey: 'cateId'});

}

查询语句

const { ctx } = this;

let result = await ctx.model.Article.findAll({

include: {

model: ctx.model.ArticleCate

}

});

4.2、1对多 hasMany

ArticleCate.associate = function (){

// 1对多

app.model.ArticleCate.hasMany(app.model.Article, {foreignKey: 'cateId'});

}

查询语句

const { ctx } = this;

let result = await ctx.model.ArticleCate.findAll({

include: {

model: ctx.model.Article

}

});

4.3、多对多 belongsToMany

model/student.js

module.exports = app => {

const { STRING, INTEGER } = app.Sequelize;

const Student = app.model.define('student', {

id: {

type: INTEGER,

autoIncrement: true,

primaryKey: true

},

name: {

type: STRING,

},

number: {

type: STRING,

allowNull: false,

},

password: {

type: STRING(32),

allowNull: false

}

}, {

timestamps: false,

tableName: 'student'

});

Student.associate = function () {

//一个学生可以选修多门课程

app.model.Student.belongsToMany(app.model.Lesson, {

through: app.model.LessonStudent,

foreignKey: 'studentId',//注意写法

otherKey: 'lessonId'

});

}

return Student;

}

model/lesson.js

module.exports = app => {

const { INTEGER, STRING } = app.Sequelize;

const Lesson = app.model.define('lesson', {

id: {

type: INTEGER,

primaryKey: true,

autoIncrement: true

},

name: {

type: STRING,

allowNull: false

}

},{

timestamps: false,

tableName: 'lesson'

});

Lesson.associate = function () {

//一个学生可以选修多门课程

//一门课程可以被多个学生选修

app.model.Lesson.belongsToMany(app.model.Student, {

through: app.model.LessonStudent,

foreignKey: 'lessonId',//注意写法

otherKey: 'studentId'

});

}

return Lesson;

}

model/lesson_student.js

module.exports = app => {

const { INTEGER } = app.Sequelize;

const LessonStudent = app.model.define('lesson_student', {

lessonId: {

type: INTEGER,

primaryKey: true

},

studentId: {

type: INTEGER,

primaryKey: true

}

},{

timestamps: false,

tableName: 'lesson_student'

});

// LessonStudent.associate = function(){

// }

return LessonStudent;

}

多对多查询数据

'use strict';

const Controller = require('egg').Controller;

class ArticleController extends Controller {

//查询数据 1对1 1对多

async index() {

const { ctx } = this;

// let result = await ctx.model.Article.findAll({

// include: {

// model: ctx.model.ArticleCate

// }

// });

let result = await ctx.model.ArticleCate.findAll({

include: {

model: ctx.model.Article

}

});

ctx.body = result;

}

//查询数据 多对多

async showAll() {

const { ctx } = this;

//课程有哪些学生选修

// let result = await ctx.model.Lesson.findAll({

// include: {

// model: ctx.model.Student

// }

// });

//每个学生选修了哪些课程

let result = await ctx.model.Student.findAll({

include: {

model: ctx.model.Lesson

}

});

ctx.body = result;

}

}

module.exports = ArticleController;

egg mysql 连表查询_Egg中使用Sequelize框架关联查询Mysql数据库相关推荐

  1. php with语法,Yii框架关联查询with用法分析

    本文实例分析了Yii框架关联查询with用法.分享给大家供大家参考.具体方法如下: Yii框架关联查询与mysql中的关联查询会有什么区别呢?这里小编就与各位来一起来看看吧. Yii的关联查询确实是一 ...

  2. mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...

    这里写目录标题 事故现场 解决方案 提到的"回表查询" InnoDB的索引 什么是回表查询 怎么优化回表查询 事故现场 数据库使用的MySQL,有一个日志表,需要进行分页查询,于是 ...

  3. mysql查询名字中第2个字为丽,数据库技术课程复习5---MySQL语言(2)(单表查询)

    0.学习前言 单表查询理解起来是比较简单的,关键要注意格式化指令的使用方法,一起加油鸭! 1.语句格式 语句格式 SELECT [ALL|DISTINCT] [,] - FROM [, ] - [ W ...

  4. mysql在查询结果中添加数据_MySQL将查询结果插入到数据表中

    转自Mysql教程:http://www.baike369.com/content/?id=5582 MySQL将查询结果插入到数据表中 INSERT语句还可以将SELECT语句查询出来的数据插入到另 ...

  5. mysql 分表索引_mysql中,分表查询和索引查询哪个更快?

    谢谢邀请! 查询快慢主决的因素有很多,存储碎片.数据量大属于I/O类问题:表结构设计.查询语句属于技术是否熟练(经验)问题.对于你的分表快还是索引快的这个问题本身就是有问题的: 在建立数据表的时候,索 ...

  6. mysql 查看表v空间自增涨_专业解决 MySQL 查询速度慢与性能差!

    一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS:Queries Per Second意思是"每秒查询率",是一台服务器每秒能够相应的查 ...

  7. mysql 查看表v空间自增涨_分分钟解决MySQL查询速度慢与性能差

    阅读本文大概需要 6 分钟. 一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: QueriesPerSecond意思是"每秒查询率", ...

  8. mysql 查看表v空间自增涨_分分钟解决 MySQL 查询速度慢与性能差

    专注于Java领域优质技术号,欢迎关注 作者:唐立勇 一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: QueriesPerSecond意思是" ...

  9. mysql sys_config表_mysql5.7中的sys表详解(转)

    在说明系统数据库之前,先来看下MySQL在数据字典方面的演变历史: MySQL4.1 提供了information_schema 数据字典.从此可以很简单的用SQL语句来检索需要的系统元数据了. My ...

最新文章

  1. Linux的shell脚本实战之while循环
  2. malloc动态分配多维数组
  3. 数字图像处理的就业前景
  4. E 做任务三(区间)
  5. [xsy3132]数表
  6. APL开发日志--2013-01-17
  7. Query String Parameters、Form Data、Request Payload的区别
  8. 如何检查Django版本
  9. 我的站(艾网---城市生活新门户)重新上线了
  10. Jmeter---Jmeter安装教程
  11. tmb100a linux,天猫魔盒TMB100E短接降级官方1.7版本
  12. Hybird接口的理解
  13. 韩顺平 教学资料下载
  14. 单位电脑禁用u盘_组策略禁止u盘_注册表禁止u盘
  15. 异或运算——小卡和质数
  16. 中新社、新华报业网等媒体报道腾云忆想云化IT生态,聚焦科技助力“双循环经济”数字化升级
  17. CVE-2014-1767
  18. CSS三列布局(五种方式)
  19. Android播放音频工具类
  20. Onvif/RTSP摄像头直播中云台控制

热门文章

  1. 耐高温防腐计算机电缆,防腐耐高温计算机屏蔽控制电缆
  2. mysql workbench pdm_MySQL Workbench
  3. 轻量级网络主干综述 20种
  4. Mxnet Focal Loss实现
  5. 重磅!商汤港中文等将开源ECCV2018MS COCO检测比赛冠军代码库
  6. python调用cmd命令
  7. oracle创建定时任务
  8. 青龙羊毛——灰兔掌赚吹牛逼
  9. Day01 你如何保持健康
  10. 【Python项目】CMDB的搭建12(SaltStack配置小结2/2)