nodejs mysql orm sequelize 笔记(一)

有个朋友说, java 没有 orm 就不用操做数据库了, 感受 orm 好厉害的样子。 带着好奇,学起了 sequelize。java

sequelize

sequelize 是 nodejs 操做数据库的一个 orm(object-relational-mapping) 库, 支持 PostgreSQL、 MySQL、 SQLite 、MSSQL 数据库, 仍是 promise 的调用方式,和支持链接池和事务还有防注入, 还有其余轻巧便利的功能,能大大提升数据库操做的效率。node

安装

npm install --save sequelizemysql

根据链接的数据库不一样, 安装不一样的数据库操做模块, 好比链接 mysql 就要安装 mysql2 模块, 否则会报错, 数据库依赖模块以下:sql

$ npm install --save pg pg-hstore
$ npm install --save mysql2
$ npm install --save sqlite3
$ npm install --save tedious // MSSQL数据库

链接

实例化 Sequelize 就是创建链接, 参数分别是数据库名(数据库必须存在该数据库),用户名,密码, options。npm

var Sequelize = require('sequelize');
var sequelize = new Sequelize('test', 'root', 'abc123', {
    host: 'localhost',
    dialect: 'mysql'      // 数据库类型 , 必须字段, 否则会报错
});
// 测试是否链接成功
(async function(){
    try {
      // promise 结合 async 处理 callback 也是我选择 sequelize 的一个缘由
        var connect = await sequelize.authenticate();
        console.log('Connection has been established successfully.');
    } catch(err) {
        console.error('err', err)
    }
})();

链接池

在创建链接的时候, 能够设置链接池,默认最小是0,最大是5。若是你是单线程的,你预期的最大线程是50, 那么最大值就设置50, 若是是多线程,就应该实例多个链接,链接池最大值取平均数。假若有5个线程,实例5个链接, 链接池的最大值就应该是 50/5 。链接池经过 pool 设置,以下。promise

var sequelize = new Sequelize('test', 'root', 'abc123', {
    host: 'localhost',
    dialect: 'mysql',
    pool: {
        max: 5,                             // 最大值
        min: 0,                          // 最小值
        acquire: 30000,           //
        idle: 10000                  // 闲时超时
    },
});

idle 参数是指闲置的链接超过多少毫秒被释放。 acquire 参数是指在创建链接出错的时候,在抛出错误以前,池子会尝试创建链接的最大时间,从新链接成功就不抛出错误,不行才再抛。多线程

定义表

定义表是调用实例化后的 sequlize 的 define 办法,第一个参数是表格名,第二个参数是字段的定义,第三个参数是options,定义一个用户表以下app

var User = sequelize.define('user', {
    name: {
        type: Sequelize.STRING
    },
    age: {
        type: Sequelize.INTEGER
    },
    desc: {
        type: Sequelize.TEXT
    }
}, {})
User.sync() ;

User.sync() 同步表格, 在 ternimal 会看到执行的 sql 语句async

CREATE TABLE IF NOT EXISTS users (id INTEGER NOT NULL auto_increment , name VARCHAR(255), age INTEGER, desc TEXT, createdAt DATETIME NOT NULL, updatedAt DATETIME NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB;

从这条语句能够看到三个内容
一、用了 TABLE IF NOT EXISTS 来建立表格,没必要本身创建表格;
二、看表格名是 users, 是定义表格名参数的复数;
三、自添加了3个字段idcreateAtupdateAt, 并且 id 是自增而且设置为了主键的, 很贴心;

对于第二、3个内容, 是 sequelize 默认行为, 能够经过 define 的第三参数来禁止

var User = sequelize.define('user', {
    name: {
        type: Sequelize.STRING
    },
    age: {
        type: Sequelize.INTEGER
    },
    desc: {
        type: Sequelize.TEXT
    }
}, {
    createdAt: false,                   // 禁止添加 createdAt 字段
    updatedAt: false,                  // 禁止添加 updatedAt 字段
    timestamps: false,               // 至关禁止了上面两项
    freezeTableName: true,        // 禁止修改标明为复数
})
User.sync() ;

接下来学习 sequlize 的增删改查。

相关文章
相关标签/搜索