nodejs mysql ORM

比node-mysql好用多了。

bookshelf

支持restful功能,用到的时候研究下:https://www.sitepoint.com/getting-started-bookshelf-js/

create

// Data其实是一个model
new Data({
'data_name': 'bookshelf',
'data_info': 'info',
'user_id': 1,
'add_time': '2016.07.24',
'is_del': 0
}).save().then(function(model){
console.log(util.inspect({model: model}));
}).catch(function(err){
console.log(err);
});
// Data() 包含参数时,默认为update操作
// 如果想create时,需要把参数写在save中
// 同时插入多条数据

.collection()的参数是:

[{id: 1, name: 'name1'}, {id: 2, name:'name2'}];

endTable.collection(JSON.parse(req.body.e_t)).invokeThen('save', null, {method: 'insert'}).then(function(model){

console.log('success');

console.log(util.inspect({model: model}));

res.send({

"name": '/submit'

})

}).catch(function(err){

console.log('fail');

console.log(err);

res.send({

"name": '/submit'

})

});

select

Data.where('data_id', 1).fetch().then(function(data){
console.log(data.toJSON());
});
Data.where({'data_id': 1, argu2: '123'}).fetch().then(function(data){
console.log(data.toJSON());
});
// Data.fetchAll() new Data({
'data_id': 81
}).fetch().then(function(model){
console.log(model.get('data_name'))
}) // 查询所有的
basemodels.Users.forge().fetchAll().then(function(data){
cb(null, data.toJSON());
})

association 看不懂

transaction 看不懂 http://www.tuicool.com/articles/JjQJv2E

query

User.query('where', 'user_id', '=', 12)
.fetch()
.then(function(model){
console.log(model.get('user_name'));
})
// 多个查询条件 andWhere
User.query({
where: {user_id: 22},
orWhere: {user_name: 'admin'}
})
.fetch()
.then(function(model){
console.log(model.get('user_id'));
})
// 复杂的查询条件
model.query(function(qb) {
qb.where('other_person', 'LIKE', '%Demo').orWhere('other_id', '>', 10);
})
// model.query() : 返回查询构造器

where

// !=
model.where('favorite_color', '<>', 'green')
// ==
model.where('favorite_color', 'red')
// 多个条件
model.where({favorite_color: 'red', shoe_size: 12})

update

new Data().where("data_id", '=', 81).save({
"user_id": 2
}, {patch: true}).then(function(data){
console.log(util.inspect({data: data}));
}).catch(function(err){
console.log(util.inspect({err: err}));
})
// 只更新传递的字段 添加{patch: true}
// 必须要有where

del

new Data().where("data_id", 80).destroy().then(function(data){
console.log(util.inspect({data: data}));
}).catch(function(err){
console.log(util.inspect({err: err}));
})
// 必须要有where

belongsTo

Data.where({'id': 1}).fetch({withRelated: ['user']}).then(function(data){
console.log(data.related('user').toJSON());
})
// data: id, user_id
// user: id
// 表的字段有一定的要求

hasMany

User.where({id: 12}).fetch({withRelated: ['result']}).then(function(user) {
console.log(JSON.stringify(user.related('result')));
});

安装

npm install mysql --save

npm install knex --save

npm install bookshelf --save

ORM要用!但关键部位不能用!

因为对于一般的Web应用开发来说,使用ORM确实能带来上述的诸多好处,而且在大部分情况下涉及不到ORM的不好的地方。但是在系统里面有大数据量、大运算量、复杂查询的地方,就不要用ORM。ORM的性能问题将给你带来灾难。在这些地方就可以使用纯SQL或者其他简单轻量的DB Helper库了。在详细了解ORM之后,你就可以扬长避短让ORM发挥其最大效用了。

bookshelf的更多相关文章

  1. POJ3628 Bookshelf 2(01背包+dfs)

    Bookshelf 2 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8745   Accepted: 3974 Descr ...

  2. Bookshelf 2

    Bookshelf 2 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit  ...

  3. POJ 3628 Bookshelf 2(01背包)

    Bookshelf 2 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9488   Accepted: 4311 Descr ...

  4. POJ3628:Bookshelf 2【01背包】

    Description Farmer John recently bought another bookshelf for the cow library, but the shelf is gett ...

  5. Node的关系型数据库ORM库:bookshelf

    NodeJs 关系数据库ORM库:Bookshelf.js bookshelf.js是基于knex的一个关系型数据库的ORM库.简单易用,内置了Promise的支持.这里主要罗列一些使用的例子,例子就 ...

  6. POJ 3268 Bookshelf 2 动态规划法题解

    Description Farmer John recently bought another bookshelf for the cow library, but the shelf is gett ...

  7. HOJ-2056 Bookshelf(线性动态规划)

    L is a rather sluttish guy. He almost never clean up his surroundings or regulate his personal goods ...

  8. poj_3628 Bookshelf 2

    Description Farmer John recently bought another bookshelf for the cow library, but the shelf is gett ...

  9. 书架 bookshelf

    书架 bookshelf 题目描述 当Farmer John闲下来的时候,他喜欢坐下来读一本好书. 多年来,他已经收集了N本书 (1 <= N <= 100,000). 他想要建立一个多层 ...

随机推荐

  1. EXT学习之——Ext下拉框绑定无效的问题

    1.保证store定义是否在combobox前面 2.有没写  .load 3.有没赋值  xxstore:xxstore 具体看详细步骤 http://www.cnblogs.com/wdw3121 ...

  2. noip2007解题报告

    T1.统计数字 给出n个数,统计每个数字出现的个数. n小,快排解决. T2.字符串的展开 给出一个字符串,其中形如 d-h,4-9之类的就展开,(前面比后面小的保留,相等也是),三个参数,P1表示大 ...

  3. 2016-07-15: Window定时器使用

    windows下定时器使用实例 #include <iostream> #include <Windows.h> using namespace std; void Timer ...

  4. Backbone笔记(续)

    Backbone Bockbone 总览 Backbone 与 MVC 模式:解决某一类问题的通用方案 - 套路 MVC:一种架构模式,解耦代码,分离关注点 M(Model) - 数据模型 V(Vie ...

  5. MySQL主从同步的延迟原理

    1. MySQL数据库主从同步延迟原理. 答:谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作,主库对所有DDL和DML产生binlo ...

  6. 【227】◀▶ IDL 其他常用函数

    参考:Programming and Control Routines —— 编程和控制函数 01   N_ELEMENTS 表达式或者变量的元素个数. 02   DEFSYSV 定义系统变量. 03 ...

  7. 详解Oracle DELETE和TRUNCATE 的区别(摘)

    语法delete from aa truncate table aa 区别 1.delete from后面可以写条件,truncate不可以. 2.delete from记录是一条条删的,所删除的每行 ...

  8. modelsim基本操作步骤及每步骤问题解决1(后续有改动会更新)

    ①File ->New =>Project出现工程对话框->1)工程命名,2)安放路径自己设置,3)库默认work.点击OK 然后出现添加文件到工程对话框->可新建文件或直接添 ...

  9. ArcGIS Wpf MarkerSymbol 图形符号无法序列化为 JSON

    [问题贴,尚不知如何解决] 在GraphicsLayer中添加一个点,使用自定义模板渲染该点,在Vs2012设计界面可以看到,但运行时出现异常 代码如下: <esri:Graphic x:Nam ...

  10. ASP.NET ZERO Core Application 学习笔记

    地址:https://www.aspnetzero.com/Documents/Development-Guide-Core 1.恢复数据库 MIGRATOR CONSOLE APPLICATION ...