资讯专栏INFORMATION COLUMN

learning sequelize

Lionad-Morotar / 2903人阅读

摘要:入门在使用来关系型操作数据库时,为了方便,通常都会选择一个合适的框架。类似这样加,会先删掉表后再建表。通过模型的类方法可以获取模型对象比如等。增加小明技术部修改小白白更新成功删除删除成功查询

sequelize入门

在使用NodeJS来关系型操作数据库时,为了方便,通常都会选择一个合适的ORM(Object Relationship Model)框架。毕竟直接操作SQL比较繁琐,通过ORM框架,我们可以使用面向对象的方式来操作表。

安装
$ npm install --save co
$ npm install --save sequelize
$ npm install --save mysql
代码模板
var Sequelize = require("sequelize");
var co = require("co");

co(function* () {
    // code here
}).catch(function(e) {
    console.log(e);
});
建立数据库连接
var sequelize = new Sequelize(
    "db_entry", // 数据库名
    "root",   // 用户名
    "",   // 用户密码
    {
        "dialect": "mysql",  // 数据库使用mysql
        "host": "localhost", // 数据库服务器ip
        "port": 3306,        // 数据库服务器端口
        "define": {
            // 字段以下划线(_)来分割(默认是驼峰命名风格)
            "underscored": true
        }
    }
);
建立表ORM
# 用户信息表
create TABLE xxts_users(
id INT(11) NOT NULL AUTO_INCREMENT,
username varchar(30) NOT NULL,
password VARCHAR(30) NOT NULL,
sex INT(2) NOT NULL DEFAULT 1,
age VARCHAR(10) NULL,
photo VARCHAR(30) NULL,
realname VARCHAR(30) NULL,
created_at DATETIME NOT NULL, 
updated_at DATETIME NOT NULL,
PRIMARY KEY (id)
);
var User = sequelize.define(
    // 这个值还会作为访问模型相关的模型时的属性名,所以建议用小写形式
    "xxts_users",
    // 字段定义(主键、created_at、updated_at默认包含,不用特殊定义)
    {
        "username": {
            "type": Sequelize.STRING(30),
            "allowNull": false
        },
        "password": {
            "type": Sequelize.STRING(30),
            "allowNull": false
        },
        "sex": {
            "type": Sequelize.INTEGER(2),
            "allowNull": false
        },
        "age": {
            "type": Sequelize.STRING(10),
            "allowNull": true
        },
        "photo": {
            "type": Sequelize.STRING(30),
            "allowNull": true
        },
        "realname": {
            "type": Sequelize.STRING(30),
            "allowNull": true
        }
    },
    {
        // 自定义表名
        "freezeTableName": true,
        "tableName": "xxts_users",

        // 是否需要增加createdAt、updatedAt、deletedAt字段
        "timestamps": true,

        // 不需要createdAt字段
        // "createdAt": false,
        // 将updatedAt字段改个名
        //"updatedAt": "utime"
        // 将deletedAt字段改名
        // 同时需要设置paranoid为true(此种模式下,删除数据时不会进行物理删除,而是设置deletedAt为当前时间
        // "deletedAt": "dtime",
        // "paranoid": true
    }
);

说明:

建表SQL会自动执行的意思是你主动调用sync的时候。类似这样:User.sync({force: true});(加force:true,会先删掉表后再建表)。我们也可以先定义好表结构,再来定义Sequelize模型,这时可以不用sync。两者在定义阶段没有什么关系,直到我们真正开始操作模型时,才会触及到表的操作,但是我们当然还是要尽量保证模型和表的同步(可以借助一些migration工具)。

增删改查

通过Sequelize获取的模型对象都是一个DAO(Data Access Object)对象,这些对象会拥有许多操作数据库表的实例对象方法(比如:save、update、destroy等),需要获取“干净”的JSON对象可以调用get({"plain": true})。

通过模型的类方法可以获取模型对象(比如:findById、findAll等)。

// 增加
function user_add() {
  co(function*() {
    var user = yield User.create({
      username: "小明",
      password: "技术部",
      sex: 2,
      age: 32,
      photo: "photo.jpg",
      realname: "admin"
    });
    console.log(user.get({ plain: true }));
  }).catch(function(e) {
    console.log(e);
  });
}

// 修改
function user_update(){
    co(function*() {
        var user = yield User.update({
            username: "小白白"
        },{
            where:{
                id:1
            }
        });
        console.log("更新成功");
    }).catch(function(e) {
        console.log(e);
    });
}

// 删除
function user_destroy(){
    co(function*() {
        var user = yield User.destroy({
            where:{
                id:1
            }
        });
        console.log("删除成功");
    }).catch(function(e) {
        console.log(e);
    });
}

// 查询
function user_query(){
    co(function*() {
        var user = yield User.findAll().spread(function(item, created){
            console.log(item.get({ plain: true }));
        });
    }).catch(function(e) {
        console.log(e);
    });
}

user_query();

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93141.html

相关文章

  • 打造属于你自己的instagram!全栈项目

    摘要:简介小伙伴们,如果觉得本文还不错,记得点个赞或者给个,你们的赞和是我编写更多更丰富开源项目的动力地址技术栈全家桶前后端分离开发模式,前端项目与后端项目属于不同的工程前端工程后端工程注此项目纯属个人瞎搞,与无任何关系。 简介 Hello 小伙伴们,如果觉得本文还不错,记得点个赞或者给个 star,你们的赞和 star 是我编写更多更丰富开源项目的动力!GitHub 地址 技术栈 rea...

    levius 评论0 收藏0
  • 打造属于你自己的instagram!全栈项目

    摘要:简介小伙伴们,如果觉得本文还不错,记得点个赞或者给个,你们的赞和是我编写更多更丰富开源项目的动力地址技术栈全家桶前后端分离开发模式,前端项目与后端项目属于不同的工程前端工程后端工程注此项目纯属个人瞎搞,与无任何关系。 简介 Hello 小伙伴们,如果觉得本文还不错,记得点个赞或者给个 star,你们的赞和 star 是我编写更多更丰富开源项目的动力!GitHub 地址 技术栈 rea...

    王岩威 评论0 收藏0
  • 打造属于你自己的instagram! 全栈项目(react + egg.js)

    摘要:简介小伙伴们,如果觉得本文还不错,记得点个赞或者给个,你们的赞和是我编写更多更丰富开源项目的动力地址技术栈全家桶前后端分离开发模式,前端项目与后端项目属于不同的工程前端工程后端工程注此项目纯属个人瞎搞,与无任何关系。 简介 Hello 小伙伴们,如果觉得本文还不错,记得点个赞或者给个 star,你们的赞和 star 是我编写更多更丰富开源项目的动力!GitHub 地址 技术栈 rea...

    scq000 评论0 收藏0
  • React+Koa全栈开发手记

    摘要:本项目中采用了进行状态管理,的主要作用是允许状态在不同分支的组件中进行传递,从而避免了使用原始方法如导致的不同分支组件之间数据无法传递子组件无法修改父组件状态等问题。 项目功能 最近在做一个旧书交易网站,本属于B/S体系结构的课程作业,但由于采用了新的框架所以跃跃欲试想都记录下来。 实现一个旧书交易网站,基本功能如下: 实现用户注册、登录功能,用户注册时需要填写必要的信息并验证,如...

    wqj97 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<