sequelise和egg(node相关)

七、Sequelize(基于promise的node.js ORM)

sequelize:https://www.sequelize.com.cn/

npm install --save sequelize
npm install --save mysql2

7.1 node.js和js,ORM

一个是基于浏览器端的 javascript (前端 JS)

一个是基于服务端的 javascript (后端 Node.js)

语法一样
组成不一样
JavaScript:

ECMAScript(语言基础,如:语法、数据类型结构以及一些内置对象)
DOM(一些操作页面元素的方法)
BOM(一些操作浏览器的方法)
Node.js:

ECMAScript(语言基础,如:语法、数据类型结构以及一些内置对象)
OS(操作系统)
file(文件系统)
net(网络系统)
ORM:其实以面向对象的思想,定义mode对应数据库的表,通过对model的操作实现对数据库表的操作。

7.2 数据库连接配置

var Sequelize = require(“sequelize”);

var sequelize = new Sequelize(‘my_database’, ‘root’, ‘db-password’, {
host: “localhost”,
port: 3306,
dialect: ‘mysql’
});

7.3 模型基础

(1)定义模型

var sequelize = new Sequelize();
sequelize.define(modelName, attributes, options);
const { Sequelize, DataTypes, Model } = require(‘sequelize’);
class User extends Model {}
User.init({}}
(2)访问模型

sequelize.models.User

(3)当未提供表名时,Sequelize 会自动将模型名复数并将其用作表名

可以使用 freezeTableName: true强制表名和模型名相等,options里面配置

还可以通过tableName: 'Employees’直接提供表名。options里面配置

(4)模型同步

同步User模型:await User.sync()
同步所有模型:await sequelize.sync();
(5)删除表

删除单个表:await User.drop();
删除所有表:await sequelize.drop();

7.4 模型操作方法

1.插入

const user = await User.create({ username: ‘Jane’,password: ‘97888’ }); //插入

user.name = ‘kkk’;

await user.save(); //更新

await user.destory(); //删除

const captains = await Captain.bulkCreate([ { name: ‘Jack Sparrow’ }, { name: ‘Davy Jones’ }]); // 批量插入数据

2.查询

Model.findAll()

相当于:select * from …

Model.findAll({ attributes: [‘foo’, ‘bar’]})

相当于: select foo,bar from …
Model.findAll({ attributes: [‘foo’, [‘bar’, ‘baz’], ‘qux’]});

相当于:SELECT foo, bar AS baz, qux FROM …

Model.findAll({ attributes: [ ‘foo’, [sequelize.fn(‘COUNT’, sequelize.col(‘hats’)), ‘n_hats’], ‘bar’ ]});

相当于:SELECT foo, COUNT(hats) AS n_hats, bar FROM …

select … from user
where …
group by …
order by …
limit 10,1.

3.更新
// UPDATE user SET password=? WHERE username = ?

const user = await User.update({ password: “helloworld” }, {

where: {

    username: 'wmz'

}

});
4.删除
// DELETE FROM user WHERE username = ‘wmz’

const user = await User.destroy({

where: {

    username: 'wmz',

}

});

7.5 获取器,设置器

在这里插入图片描述

设置器就是在存入数据库之前对其进行处理之后再存入数据库,获取器同理在获取之后进行处理

7.6 验证,约束

约束:

allowNull: false,   

unique: true   // 唯一性

验证器:

在这里插入图片描述

7.7 原始查询

const [results, metadata] = await sequelize.query("UPDATE users SET y = 42 WHERE x = 12");

7.8 关联查询

7.9 偏执表

Sequelize 支持 paranoid 表的概念. 一个 paranoid 表是一个被告知删除记录时不会真正删除它的表.反而一个名为 deletedAt 的特殊列会将其值设置为该删除请求的时间戳.

这意味着偏执表会执行记录的 软删除,而不是 硬删除.

八、egg的简单使用

EGG:https://eggjs.org/zh-cn/intro/quickstart.html

8.1 内置对象

1.Application 对象

几乎可以在编写应用时的任何一个地方获取到,下面介绍几个经常用到的获取方式

作为参数传递

在这里插入图片描述

在继承于 Controller, Service 基类的实例中,可以通过 this.app 访问到 Application 对象。

在这里插入图片描述

在 Context 对象上,可以通过 ctx.app 访问到 Application 对象

在这里插入图片描述

2.context对象

Context 是一个请求级别的对象,继承自 Koa.Context。在每一次收到用户请求时,框架会实例化一个 Context 对象,这个对象封装了这次用户请求的

信息,并提供了许多便捷的方法来获取请求参数或者设置响应信息。框架会将所有的 Service 挂载到 Context 实例上,一些插件也会将一些其他的方法和

对象挂载到它上面(egg-sequelize 会将所有的 model 挂载在 Context 上)。
获取方式:
在这里插入图片描述

3.request和response

通过ctx.request获取请求报文,通过ctx.response获取响应报文

ctx.request.query.id 和 ctx.query.id 是等价的,ctx.response.body= 和 ctx.body= 是等价的。

router.get(’/addOne/:taskname’, controller.home.addOne);

8.2 router,controller,service,model
在这里插入图片描述

router.get('/getAll', controller.home.findAll);
class HomeController extends Controller {

    async findAll() {

        const res = await this.ctx.service.home.findAll();

        this.success(res);

     }
}
class HomeService extends Service {

    // 获取所有事项

    async findAll() {

        // ctx - 当前请求的 Context 实例

        const todolist = this.ctx.model.models.todolist;

        return await todolist.findAll();

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊啊啊~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值