成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

learning sequelize

Lionad-Morotar / 2934人閱讀

摘要:入門在使用來關(guān)系型操作數(shù)據(jù)庫時,為了方便,通常都會選擇一個合適的框架。類似這樣加,會先刪掉表后再建表。通過模型的類方法可以獲取模型對象比如等。增加小明技術(shù)部修改小白白更新成功刪除刪除成功查詢

sequelize入門

在使用NodeJS來關(guān)系型操作數(shù)據(jù)庫時,為了方便,通常都會選擇一個合適的ORM(Object Relationship Model)框架。畢竟直接操作SQL比較繁瑣,通過ORM框架,我們可以使用面向?qū)ο蟮姆绞絹聿僮鞅怼?/p> 安裝

$ 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);
});
建立數(shù)據(jù)庫連接
var sequelize = new Sequelize(
    "db_entry", // 數(shù)據(jù)庫名
    "root",   // 用戶名
    "",   // 用戶密碼
    {
        "dialect": "mysql",  // 數(shù)據(jù)庫使用mysql
        "host": "localhost", // 數(shù)據(jù)庫服務(wù)器ip
        "port": 3306,        // 數(shù)據(jù)庫服務(wù)器端口
        "define": {
            // 字段以下劃線(_)來分割(默認是駝峰命名風(fēng)格)
            "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(
    // 這個值還會作為訪問模型相關(guān)的模型時的屬性名,所以建議用小寫形式
    "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字段改名
        // 同時需要設(shè)置paranoid為true(此種模式下,刪除數(shù)據(jù)時不會進行物理刪除,而是設(shè)置deletedAt為當前時間
        // "deletedAt": "dtime",
        // "paranoid": true
    }
);

說明:

建表SQL會自動執(zhí)行的意思是你主動調(diào)用sync的時候。類似這樣:User.sync({force: true});(加force:true,會先刪掉表后再建表)。我們也可以先定義好表結(jié)構(gòu),再來定義Sequelize模型,這時可以不用sync。兩者在定義階段沒有什么關(guān)系,直到我們真正開始操作模型時,才會觸及到表的操作,但是我們當然還是要盡量保證模型和表的同步(可以借助一些migration工具)。

增刪改查

通過Sequelize獲取的模型對象都是一個DAO(Data Access Object)對象,這些對象會擁有許多操作數(shù)據(jù)庫表的實例對象方法(比如:save、update、destroy等),需要獲取“干凈”的JSON對象可以調(diào)用get({"plain": true})。

通過模型的類方法可以獲取模型對象(比如:findById、findAll等)。

// 增加
function user_add() {
  co(function*() {
    var user = yield User.create({
      username: "小明",
      password: "技術(shù)部",
      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();

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/93141.html

相關(guān)文章

  • 打造屬于你自己的instagram!全棧項目

    摘要:簡介小伙伴們,如果覺得本文還不錯,記得點個贊或者給個,你們的贊和是我編寫更多更豐富開源項目的動力地址技術(shù)棧全家桶前后端分離開發(fā)模式,前端項目與后端項目屬于不同的工程前端工程后端工程注此項目純屬個人瞎搞,與無任何關(guān)系。 簡介 Hello 小伙伴們,如果覺得本文還不錯,記得點個贊或者給個 star,你們的贊和 star 是我編寫更多更豐富開源項目的動力!GitHub 地址 技術(shù)棧 rea...

    levius 評論0 收藏0
  • 打造屬于你自己的instagram!全棧項目

    摘要:簡介小伙伴們,如果覺得本文還不錯,記得點個贊或者給個,你們的贊和是我編寫更多更豐富開源項目的動力地址技術(shù)棧全家桶前后端分離開發(fā)模式,前端項目與后端項目屬于不同的工程前端工程后端工程注此項目純屬個人瞎搞,與無任何關(guān)系。 簡介 Hello 小伙伴們,如果覺得本文還不錯,記得點個贊或者給個 star,你們的贊和 star 是我編寫更多更豐富開源項目的動力!GitHub 地址 技術(shù)棧 rea...

    王巖威 評論0 收藏0
  • 打造屬于你自己的instagram! 全棧項目(react + egg.js)

    摘要:簡介小伙伴們,如果覺得本文還不錯,記得點個贊或者給個,你們的贊和是我編寫更多更豐富開源項目的動力地址技術(shù)棧全家桶前后端分離開發(fā)模式,前端項目與后端項目屬于不同的工程前端工程后端工程注此項目純屬個人瞎搞,與無任何關(guān)系。 簡介 Hello 小伙伴們,如果覺得本文還不錯,記得點個贊或者給個 star,你們的贊和 star 是我編寫更多更豐富開源項目的動力!GitHub 地址 技術(shù)棧 rea...

    scq000 評論0 收藏0
  • React+Koa全棧開發(fā)手記

    摘要:本項目中采用了進行狀態(tài)管理,的主要作用是允許狀態(tài)在不同分支的組件中進行傳遞,從而避免了使用原始方法如導(dǎo)致的不同分支組件之間數(shù)據(jù)無法傳遞子組件無法修改父組件狀態(tài)等問題。 項目功能 最近在做一個舊書交易網(wǎng)站,本屬于B/S體系結(jié)構(gòu)的課程作業(yè),但由于采用了新的框架所以躍躍欲試想都記錄下來。 實現(xiàn)一個舊書交易網(wǎng)站,基本功能如下: 實現(xiàn)用戶注冊、登錄功能,用戶注冊時需要填寫必要的信息并驗證,如...

    wqj97 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<