当前位置: 首页 > 工具软件 > Sequelize > 使用案例 >

sequelize学习笔记

秦俊发
2023-12-01

sequelize学习笔记

一、前言
1、sequelize简介【sequelize官方文档】、【sequelize-v3到v6文档】
sequelize是众多ORM框架的一种,ORM框架的作用就是就是可以把关系型数据库表结构映射为javascript对象。通过ORM框架,对数据库进行 CURD时,不需要直接去书写 SQL语句,而是通过操作对象,进而由框架转化为具体的SQL语句进行查询,将对象转化表中的一条记录。

2、sequelize模型
模型是sequelize的本质,sequelize同过一个个的模型与数据库的表建立起映射关系,每一个模型对应数据库的一个表。

(1)、定义模型
调用sequelize.define(modelName, attributes, options);

modelName是创建的表名,sequelize默认会将单数的模型名字映射到数据库复数化,例如:model定义为user,映射到数据库就是users。可以用freeTableName:true,关闭表名的转译。

attribute,是表的内容的字段结构,sequelize支持的类型可见DataTypes    ,{type:sequelize.DataType, allowNull:false, defaultValue: null, viladate: {min:-180,max180, }primarykey:true,autoIncrement:true,

type:代表表字段的数据类型,allowNull定义字段是否可以为空,defaultValue定义默认的字段值,viladate对字段的插入的值进行验证,细节可见验证,定义字段是否为主键,autoIncrement定义是否自增。

     options:配置,{timestamps:false,paranoid:true,underscored:true,freeTablename:true,tableName:'user'}

timestamps:是否增加TIMESTAMP属性(updateAt,createdAt),为true时,创建表时自动会生成updateAt,createdAt字段,插入数据和更新数据时会记录插入数据喝更新数据的时间,paranoid:不删除数据库的原有项,增加新属性deleteAt并设置为当前日期,只有TIMESTAMP属性是允许有效的,underscored:不用驼峰语法,用下划线代替,当字段定义为defaultValue名字的驼峰样式,映射到表中就是default_value字段了,freetableName:是否将表名在数据库中复数化,tableName:定义表名。

3、模型查询
findAll(options)它生成一个标准的 SELECT 查询,该查询将从表中检索所有条目(除非受到 where 子句的限制).

    findAllCount(options)该方法是结合了 findAll 和 count 的便捷方法. 在处理与分页有关的查询时非常有用,在分页中,你想检索带有 limit 和 offset 的数据,但又需要知道与查询匹配的记录总数.返回的两个对象的属性为[count, rows],count:为查找的符合

条件的总数,rows获得的记录。

    findOne(options)方法获得它找到的第一个条目(它可以满足提供的可选查询参数).

    options:该对象是对查询的数据的查询条件,可包含limit一次查询多少条数据,offset:查询的偏移值,order:[['name','desc']],根据字段,进行排序,distinct:true,distinct是否消除同样的数据记录,include:[{mode;'Users',as:'user',required:false,attributes['name']}]mode关联的表的模型名字,as是表的别名,attributes是要关联查询的字段值。

    findByPk(id)方法使用提供的主键从表中仅获得一个条目.

    findOrCreate:除非找到一个满足查询参数的结果,否则方法 findOrCreate 将在表中创建一个条目. 在这两种情况下,它将返回一个实例(找到的实例或创建的实例)和一个布尔值,指示该实例是已创建还是已经存在.使用 where 参数来查找条目,而使用 defaults 参数来定义必须创建的内容. 如果 defaults 不包含每一列的值,则 Sequelize 将采用 where 的值(如果存在).

     操作符:Sequelize 提供了多种运算符.详情见sequlize官方文档

4、关联
数据库的关联映射:一对一,一对多,多对一,多对多,

     一对一:例如用户表和身份证表,一个人只有一个身份证号,一个身份证号只对应一个人

     一对多:例如一个班级有多个学生

     多对一:例如多个学生对应一个班级

     多对多:例如一个学生可以选修多门课程,一门选修课程也可以被多名学生选修

     sqquelize的关联:hasOne,belongsTo, hasMany, belongsToMany

    一对一:

     A.hasOne(B):B表中设置有A表的外健,

     B.belongsTo.A:B表中有A表的外键;

   一对多:

      class.hasMany(student):在student表中设置有class表的外键;

      student.belongsTo(class):在student表中设置有class表的外键;

   多对多:

  考虑模型 Movie 和 Actor. 一位 actor 可能参与了许多 movies,而一部 movie 中有许多 actors 参与了其制作. 跟踪关联的联结表将被称为 ActorMovies,其中将包含外键 movieId 和 actorId.

   Movies.belongsTo('Actord',throught:ActorMovies);

   Actord.belongsTo('Movies',throught:ActorMovies);

    因为在 belongsToMany 的 through 参数中给出了一个字符串,所以 Sequelize 将自动创建 ActorMovies 模型作为联结模型.

   参数constraints:false禁用引用约束。

5、数据的迁移
migration模块可进行数据的迁移,也可以在表中插入新的列

 类似资料: