orm mysql nodejs_nodejs mysql orm sequelize 笔记(一)

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

sequelize

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

安装

npm install --save sequelize

根据连接的数据库不同, 安装不同的数据库操作模块, 比如连接 mysql 就要安装 mysql2 模块, 不然会报错, 数据库依赖模块如下:

$ npm install --save pg pg-hstore

$ npm install --save mysql2

$ npm install --save sqlite3

$ npm install --save tedious // MSSQL

连接

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

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 设置,如下。

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,定义一个用户表如下

var User = sequelize.define('user', {

name: {

type: Sequelize.STRING

},

age: {

type: Sequelize.INTEGER

},

desc: {

type: Sequelize.TEXT

}

}, {})

User.sync() ;

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

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;

从这条语句可以看到三个内容

1、用了 TABLE IF NOT EXISTS 来创建表格,不必自己建立表格;

2、看表格名是 users, 是定义表格名参数的复数;

3、自添加了3个字段id、createAt、updateAt, 而且 id 是自增并且设置为了主键的, 很贴心;

对于第2、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 的增删改查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值