在使用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 } } );
# 用户信息表 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();