Node.js ORM_Sequelize 学习记录1
说明
只是单纯的记录学习过程
##Sequelize
是一个基于 promise 的 Node.js ORM, 目前支持 Postgres, MySQL, SQLite 和 Microsoft SQL Server. 它具有强大的事务支持, 关联关系, 读取和复制等功能
官方中文文档
环境说明
本次学习使用的:
mysql5.6
Node.js 8.9.3
npm 5.5.1
安装sequelize模块及MySQL2
$ npm init
$ npm install --save sequelize
$ npm install --save mysql2
建立连接
我们首先建立一个db.js
创建类的目的:更好的分层
db负责和数据库交互
实体类负责和db交互
service负责调用实体类的方法来处理逻辑
./db.js
/*我们首先引入sequelize模块*/
const Sequelize = require('sequelize');
class Db {
sequelize(){
/* 参数 database username password */
let sequelize = new Sequelize('orm','root','123456',{
host: 'localhost', //数据库地址
dialect: 'mysql', //指定数据库
//operatorsAliases:false,
pool: {
max: 5, //连接池最大连接数量
min: 0, //连接池最小连接数量
idle: 1000 //如果一个线程 10 秒内没有使用则释放该线程
}
});
return sequelize
}
/*可以调用该方法测试是否能连接成功*/
connectionTest(){
this.sequelize()
.authenticate()
.then(()=>{
console.log('连接测试成功')
})
.catch((err)=>{
console.log('连接出错啦')
});
}
}
module.exports = Db;
创建实体类user.js
./user.js
const Sequelize = require('sequelize');
const db = require('./db'); //我们首先引入之前写好的db类
const dbs = new db; //实例化
const sequelize = dbs.sequelize(); //调用该连接方法
dbs.connectionTest(); //调用该连接测试方法
class User {
Users(){
//首先我们来创建一张表模型 model
let User = sequelize.define('user',{
userName: {
type: Sequelize.STRING,
field: 'user_name'
},
email: {
type: Sequelize.STRING
}
},{
/*
* 如果为true 则表名和model相同。即user
* 如果为false Mysql创建的表名称会是复数users
* 如果指定的表名称本来就是复数形式则不变*/
freezeTableName: false
});
return User
}
/* 接下来我们我创建一张 user 表
* 创建表方法
* User.sync() 会创建表并且返回一个promise对象
* 如果force = true 则会把存在表的先销毁在创建表
* 默认情况下 forse = false*/
createTable(Users){
Users.sync({force: false}).then(()=>{
console.log(`创建表成功`)
});
}
/*添加用户*/
async addUser(Users,userName,email){
return Users.create({
userName: userName,
email:email
})
}
/*第一个查询*/
async findAll(Users){
let result = await Users.findAll();
return result
}
}
module.exports = User;
创建service 实现逻辑
./service.js
const User = require('./user'); //引入实体类User
let Users = new User(); //实例化
/*首先我们根据模型来创建一张表*/
let userModule = Users.Users();
Users.createTable(userModule); //调用该方法 就会发现会自动帮我创建一张表
连接测试成功
Executing (default): CREATE TABLE IF NOT EXISTS `users` (`id` INTEGER NOT NULL auto_increment , `user_name` VARCHAR(255), `email` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `users`
创建表成功
之后我们将该方法注释 在测试其他两个方法
./service.js
const User = require('./user'); //引入实体类User
let Users = new User(); //实例化
/*首先我们根据模型来创建一张表*/
let userModule = Users.Users();
//Users.createTable(userModule); //调用该方法 就会发现会自动帮我创建一张表
/*添加数据*/
async function addUser(name,email){
try {
let result = await Users.addUser(userModule,name,email);
console.log('添加数据成功')
}catch (err){
console.log(err)
}
}
addUser('test','[email protected]')
Executing (default): SELECT 1+1 AS result
连接测试成功
Executing (default): INSERT INTO `users` (`id`,`user_name`,`email`,`createdAt`,`updatedAt`) VALUES (DEFAULT,'test','[email protected]','2018-12-18 06:12:12','2018-12-18 06:12:12');
添加数据成功
成功啦
同理我们来试一下查询的方法
./service.js
const User = require('./user'); //引入实体类User
let Users = new User(); //实例化
/*首先我们根据模型来创建一张表*/
let userModule = Users.Users();
//Users.createTable(userModule); //调用该方法 就会发现会自动帮我创建一张表
/*添加数据*/
async function addUser(name,email){
try {
let result = await Users.addUser(userModule,name,email);
console.log('添加数据成功')
}catch (err){
console.log(err)
}
}
//addUser('test','[email protected]')
/*第一个查询*/
async function findAll(){
try {
let result = await Users.findAll(userModule);
console.log(result[0].dataValues);
}catch (err){
console.log(err)
}
}
findAll()
连接测试成功
Executing (default): SELECT `id`, `user_name` AS `userName`, `email`, `createdAt`, `updatedAt` FROM `users` AS `user`;
{ id: 1,
userName: 'test',
email: '[email protected]',
createdAt: 2018-12-18T06:12:12.000Z,
updatedAt: 2018-12-18T06:12:12.000Z }
成功啦 ~~~~