转载请注明出处:http://www.cnblogs.com/shamoyuu/p/sequelize_factory.html

一、什么是sequelize

nodejs的后台在操作数据库的时候,需要程序员写sql,但是面向集合的sql语言对我们面向对象的程序员很不友好,所以Java有hibernate,js有sequelize。hibernate和sequelize都是面向对象的,用它们操作数据库既方便快捷,又安全可靠。

官方API http://www.nodeclass.com/api/sequelize.html 下面用到的sequelize所有属性和方法的具体详情都可以到此查看

二、sequelize的用法

首先安装

cnpm install --save sequelize
cnpm install --save mysql
cnpm install --save mysql2

mysql2,最新版本的sequelize需要用到,具体干啥的还没研究

安装完然后写代码,首先引入

var Sequelize = require('sequelize');  

然后连接数据库

var sequelize = new Sequelize(
'database', //数据库名
'root', //用户名
'123456', //密码
{
'dialect': 'mysql', // 数据库使用mysql
'host': 'localhost', // 数据库服务器ip
'port': 3306 // 数据库服务器端口
}
);

然后新建一个表对象,用来操作数据库表

var User = sequelize.define('User', {
user_name: {
type: DataTypes.STRING,
allowNull: false
},
user_level: {
type: DataTypes.INTEGER,
allowNull: false
},
user_proj: {
type: DataTypes.STRING
}
});

插入一条数据

User.create({
user_name: 'Meleong',
user_level: 1
})

删除一条数据

User.destroy({
where: {
id: 1
}
})

修改一条数据

User.update({
password: '12'
},
{
where: {
name: {
$like: 'Xiao%'
}
}
})

查找数据

User.findAll({
attributes: ['user_name', 'user_level'],
where: {
id: {
$eq: '1'
}
}
}).then(function (result) {
console.info("获取到的用户信息", result)
});

看上去是挺美好的,但是如果表多了,对象也多了,就不好维护,总不能每个js里初始化一遍吧,所以我们需要一个工厂,来为我们生产表对象

二、sequelize的小工厂

首先我们新建一个文件config/dbconfig.json,用来存储数据库的配置

{
"development": {
"username": "development-username",
"password": "development-password",
"database": "development-database",
"options": {
"host": "localhost",
"dialect": "mysql",
"port": 3360
}
},
"production": {
"username": "production-username",
"password": "production-password",
"database": "production-database",
"options": {
"host": "sqld.duapp.com",
"dialect": "mysql",
"port": 4050
}
}
}

然后我们新建一个文件夹models,它用来存储所有的表对象

然后我们在这个文件夹下新建一个index.model.js文件

var fs = require('fs');
var path = require('path');
var Sequelize = require('sequelize');
var basename = path.basename(module.filename);
var env = process.env.NODE_ENV || 'development';
var config = require(__dirname + '/../config/dbconfig.json')[env];
var db = {}; var sequelize = new Sequelize(config.database, config.username, config.password, config.options); //扫描当前路径(models)下所有的js文件,然后通过sequelize.import的方法导入
fs
.readdirSync(__dirname)
.filter(function (file) {
return (file !== basename) && (file.slice(-8) === 'model.js');
})
.forEach(function (file) {
console.info(file);
var model = sequelize.import(path.join(__dirname, file));
db[model.name] = model;
}); Object.keys(db).forEach(function (modelName) {
if (db[modelName].associate) {
db[modelName].associate(db);
}
}); //自动建表
// sequelize.sync().then(function () {
// console.info("建表完成")
// }, function () {
// console.info("建表失败", arguments);
// }); db.sequelize = sequelize;
db.Sequelize = Sequelize; module.exports = db;

这里是用了sequelize.import方法,通过文件的形式导入表对象。

最下面注释掉的代码是自动建表,如果表不存在就会自动根据表对象的内容创建表,它的具体参数可以看官方API

然后我们在models文件夹下新建文件user.model.js

module.exports = function (sequelize, DataTypes) {
var User = sequelize.define('User', {
id: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
unique: true,
autoIncrement: true
},
name: DataTypes.STRING(255),
age: DataTypes.INTEGER(11)
}, {
timestamps: false,
tableName: 'user'
}); return User;
};

至此我们整个表对象的工厂已经完成了,如果你仔细观察会发现index.model.js文件里并没有任何User字符,因为User表对象不需要我们手动导入,index.model.js会自动扫描models文件夹下所有的文件,并且导入后缀为model.js的文件

然后我们在需要的地方引入index.model文件,就可以直接获取表对象

var User = require('../models/index').User;

然后和上面一样进行增删改查

完结,散花

【前端】nodejs的ORM框架sequelize的工厂化的更多相关文章

  1. Nodejs ORM框架Sequelize快速入门

    Nodejs ORM框架Sequelize快速入门 什么是ORM? 简单的讲就是对SQL查询语句的封装,让我们可以用OOP的方式操作数据库,优雅的生成安全.可维护的SQL代码.直观上,是一种Model ...

  2. Node.js ORM 框架 sequelize 实践

    最近在做团队的一个内部系统,这次使用的nodejs web框架是团队统一的hapi.js,而数据库依然是mysql,ORM 框架选用有着6000+ stars 的 sequelize.js,hapi- ...

  3. Nodejs ORM框架Sequelize(模型,关联表,事务,循环,及常见问题)

    1.建立连接 const Sequelize = require('sequelize'); const sequelize = new Sequelize('database', 'username ...

  4. Node.js ORM框架Sequelize使用示例

    示例代码: const Sequelize = require('sequelize'); const sequelize = new Sequelize('database', 'username' ...

  5. 项目总结,彻底掌握NodeJS中如何使用Sequelize

    前言 sequelize是什么? sequelize是基于NodeJs的ORM框架,它适用于不同的数据库,如:Postgres.MySQL.SQLite.MariaDB,我们可以通过sequelize ...

  6. Django学习(三)---Models(ORM框架)

    1) Django 中Models是与数据库相关的,与数据库相关的代码一般写在 models.py中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在sett ...

  7. Web前端-Vue.js必备框架(五)

    Web前端-Vue.js必备框架(五) 页面组件,商品列表组件,详情组件,购物车清单组件,结算页组件,订单详情组件,订单列表组件. vue-router 路由 vuex 组件集中管理 webpack ...

  8. Orm框架开发之NewExpression合并问题

    之前都是看别人写博客,自己没有写博客的习惯.在工作的过程中,总是会碰到许多的技术问题.有很多时候想记录下来,后面一直有许多的问题等着解决.总想着等系统完成了,再回头总结下.往往结果就把这事抛到脑后了. ...

  9. ORM框架之EntityFramework介绍

    ORM框架之EntityFramework介绍 1. 简介 大家好!我是高堂. 作为一位伪前端程序猿,我给大家介绍一下微软的自家的 ORM框架. ADO.NET Entity Framework 以下 ...

随机推荐

  1. java.lang.String中[ "张飞"+1+1 ] 和 [ "张飞"+(1+1) ]

    废话不多说,上代码: package com.core; public class StringTest { public static void main(String[] args) { Stri ...

  2. 关于HDPHP,HDCMS 安装,空白问题

    这几天,框论坛发现,HDPHP,号称还不错. 微信,支付宝支付,短信,阿里云OSS,权限认证等,都有.对开发人员来说很好了.. 马上下载来试试, HDPHP官方文档说需要PHP5.6,不过貌似我5.5 ...

  3. Nutch2.2.1在MyEclipse中的安装(window7环境)

    在https://svn.apache.org/repos/asf/nutch/branches/branch-2.2.1/网址里面可以找到Nutch2.2.1版本的资源文件. 1. 在MyEclip ...

  4. Spring MVC Mock demo

    package com.niwodai.mem.web.controller; import com.alibaba.fastjson.JSON; import org.junit.Before; i ...

  5. Python之Suds库调用WCF时复杂参数序列化

    今天主要做自动化测技术支持工作,最近一直在做接口自动化这块,前些天在研究将web页面模拟http进行接口自动化,这周杭州那边想测试WCF服务,所以这两天一直在探索.遇到的第一个问题就是服务参数传参序列 ...

  6. 介绍一种非常好用汇总数据的方式GROUPING SETS

    介绍 对于任何人而言,用T-SQL语句来写聚会查询都是工作中重要的一环.我们大家也都很熟悉GROUP BY子句来实现聚合表达式,但是如果打算在一个结果集中包含多种不同的汇总结果,可能会比较麻烦.我将举 ...

  7. Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated ?

    Thread.stop, Thread.suspend, Thread.resume被标记为废弃的方法.在查看JDK的文档时,提到了下面的参考文章,先是英文版,接着是中文翻译. Why is Thre ...

  8. asp.net Global.asax 不运行解决

    asp.net application的站点发布后 Global.asax 未运行,搞了好久终于解决, 解决方法如下: publish设置 该设置经测试在win server 2003 和2008 都 ...

  9. nodejs和npm的安装

    下载nodejs的压缩包 网址:https://nodejs.org/en/ 下载以tar.xz结尾的包例如:node-v8.9.4-linux-x64.tar.xz 上传包到制定的目录 可以用lrz ...

  10. [Uva10294]Arif in Dhaka

    [Uva10294]Arif in Dhaka 标签: 置换 Burnside引理 题目链接 题意 有很多个珠子穿成环形首饰,手镯可以翻转和旋转,项链只能旋转.(翻转过的手镯相同,而项链不同) 有n个 ...