【mysql】ORM库Sequelize的基础使用

官网

https://sequelize.org/master/index.html

简单介绍

Sequelize是基于orm,基于promise的一个mysql库。

orm

即对象关系映射。

简单来说:orm会将对象与数据库建立联系。使用orm库时,不直接运行各种sql语句,而是通过包装好的方法对对象进行操作。

再简单的说:操作数据库,不用在代码里敲各种sql语句,可以安心的当一个高贵的API调用师了。

安装

npm install --save sequelize

同时你还要选择一个驱动安装(下列选一个,本文使用了mysql2)

$ npm install --save pg pg-hstore # Postgres
$ npm install --save mysql2
$ npm install --save mariadb
$ npm install --save sqlite3
$ npm install --save tedious # Microsoft SQL Server

基础逻辑

引入Sequelize 创建实例。连接数据库。
使用Sequelize实例创建Model实例。调用Model实例的各种方法,进行对数据库数据的操作。

基础使用

连接

    const sequelize = new Sequelize({
      database: 'todolist',
      username: 'root',
      password: '123456',
      host: 'localhost',
      port: 3306,
      dialect: 'mysql',
      pool: {
        max: 5,
        min: 0,
        idle: 30000,
      },
    });

创建实例后会自己动连接,测试连接状态:

sequelize.authenticate().then(()=>{
console.log("成功)
}) .catch(()=>{
 console.log("失败)
  }) 

创建Model

import { DataTypes } from 'sequelize';
// sequelize.define(Model名,{各列的类型},{参数})
const User = sequelize.define(
  'User',							//指定表名
  {
    id: { 
	    type: DataTypes.INTEGER, 	//指定类型
	    autoIncrement: true, 		//自增。
	    primaryKey: true 			//主键
    },
    username: { 
	    type: DataTypes.STRING, 
	    allowNull: false 			//不能为null
    },
    password: { 
	    type: DataTypes.STRING, 
	    allowNull: false 
    },
    avatar: { 
	    type: DataTypes.STRING, 
	    allowNull: true, 
	    defaultValue: '1.png' 
    },
  },
  {
    tableName: 'users',		//设置对应表名
    timestamps: false,		//设置为true时,会自动在数据中增加两项时间戳
  }
);

Datatype

对应数据库的各种类型,以下是常用的几种。其他的在官网都有介绍。

DataTypes.STRING             // VARCHAR(255)
DataTypes.STRING(1234)       // VARCHAR(1234)
DataTypes.BOOLEAN            // TINYINT(1)
DataTypes.INTEGER            // INTEGER

DataTypes.FLOAT              // FLOAT
DataTypes.FLOAT(11)          // FLOAT(11)
DataTypes.FLOAT(11, 10)      // FLOAT(11,10)
DataTypes.DATE       		 // DATETIME 

参数介绍

tableName

sequelize.define的第一个参数为Model的名称。

创建Model实例时,会自动根据该名称,对相应的表建立关联(表的名称为Model实例名称的复数形式)。
例如:

Model名称        对应表名
user             users
pserson          people

推荐直接通过设置表名(设置 sequelize.define第二个参数中的tableName属性)

数据操作

//可为空的列和id不用设置
User.create({username:'123', password:'123'});

User.destroy({ where: { id:0 } });

User.update({ avatar:'xxx.png'}, { where: { id:0 } });

User.findOne({ where: { id: 0} });
User.findAll({ where: { avatar: '1.png'} });

注意

返回值类型

所有的方法均返回Promise

findOne,create 返回Promise<Model>

findAll 返回Promise<Model[]>

update,destroy 返回Promise<number>

返回值处理

第一种:调用Model实例自带的toJson方法(结果只会包括数据库数据)

let user = await User.findOne({where:{id:0})
console.log(user.toJson)
/*
{
	id:0,
	username:'xxx'
	password:'xxx'
	avatar:'xxx'
}
*/

缺点:返回Model数组时,需要一个个的调用。所以这种方法只适合返回单个Model实例的情况。
第二种 :调用JSON方法(结果同样也只会包括数据库数据)

let users = await User.findAll({where:{avatar:'1.png'})
console.log(JSON.parse(JSON.stringify(users )))
/*
[
{
	id:0,
	username:'xxx'
	password:'xxx'
	avatar:'1.png'
},
{
	id:1,
	username:'xxx'
	password:'xxx'
	avatar:'1.png'
}
]

*

推荐分离出一个工具方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值