Node.js ORM_Sequelize学习

说明

只是单纯的记录学习过程
##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 }

成功啦 ~~~~

猜你喜欢

转载自blog.csdn.net/weixin_39907636/article/details/85064349