learning sequelize

sequelize入門

在使用NodeJS來關係型操做數據庫時,爲了方便,一般都會選擇一個合適的ORM(Object Relationship Model)框架。畢竟直接操做SQL比較繁瑣,經過ORM框架,咱們可使用面向對象的方式來操做表。mysql

安裝

$ 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

建表SQL會自動執行的意思是你主動調用sync的時候。相似這樣:User.sync({force: true});(加force:true,會先刪掉表後再建表)。咱們也能夠先定義好表結構,再來定義Sequelize模型,這時能夠不用sync。二者在定義階段沒有什麼關係,直到咱們真正開始操做模型時,纔會觸及到表的操做,可是咱們固然仍是要儘可能保證模型和表的同步(能夠藉助一些migration工具)。數據庫

增刪改查

經過Sequelize獲取的模型對象都是一個DAO(Data Access Object)對象,這些對象會擁有許多操做數據庫表的實例對象方法(好比:save、update、destroy等),須要獲取「乾淨」的JSON對象能夠調用get({'plain': true})。npm

經過模型的類方法能夠獲取模型對象(好比: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();
相關文章
相關標籤/搜索