ORM和sequelize

一、ORM(Object Relactional Mapping,对象关系映射)

ORM是一种解决面向对象与关系型数据库存在的互不匹配的现象的技术,实现面向对象技术和关系型数据库的一种映射。

类---->表

类的属性------->表中的类

类的对象------->表中的行

持久化,即将数据保存到可永久保存的存储设备中。持久化的主要应用是将内存中的数据存储在关系型数据库中,也可以存储在磁盘文件中或xml中。

 ORM技术特点:

 1、提高了开发效率。ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。

 2、ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。

二、常见的ORM框架

Sequelize基于promise(es6的对象,能够代表了未来将要发生的事件,用来传递异步操作的消息。)的关系型数据库ORM框架,这个库完全采用javascript并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect)。

安装Sequlize:npm i sequelize mysql2 -S

三、Sequlize的使用

1.创建数据库连接文件

const Sequelize = require('sequelize');
const dbConfig = {
    database: '数据库名',
    username: '用户名',
    password: '密码',
    host: 'host',
    dialect: 'mysql', // 'mysql'|'sqlite'|'postgres'|'mssql'
};
const sequelize = new Sequelize(dbConfig.database, dbConfig.username, dbConfig.password, {
    host: dbConfig.host,
    dialect: dbConfig.dialect,
    operatorsAliases: false,
    // 设置时区
    timezone: '+08:00',
    pool: {
        max: 5,
        min: 0,
        acquire: 30000,
        idle: 10000
    },
    
    // define: {
    // 全局设置引擎, 默认是 InnoDB
    //     engine: 'MYISAM', 
    // SQLite only
    // storage: 'path/to/database.sqlite'
});
module.exports = sequelize;

2.新建表

var  Sequelize=require('sequelize');
const sequelize = require('../config/dbconfig');

var User=sequelize.define('myuser',{
    id:{
        type:Sequelize.INTEGER,
        autoIncrement:true,
        primaryKey:true,
        unique:true
    },
    usernaem:{
        type:Sequelize.STRING,
        allowNull:false
    },
    gender:{
        type:Sequelize.STRING,
        allowNull:false
    },
    age:{
        type:Sequelize.STRING,
        allowNull:false,
        field:'user_age',
    },
    regDate:{
        type:Sequelize.STRING,
        allowNull:false
    }
},{
    freezeTableName:true,
    timestamps:false
});

3.增加

exports.addUser=function(uname,ugender,uage,uregdate){
    return User.create({//sequelize模块提供的,用于向表中插入记录
        usernaem:uname,
        gender:ugender,
        age:uage,
        regDate:uregdate
    }).then(function(result){
        console.log('插入成功'+result)
    }).catch(function(err){
        console.log('插入失败'+err)
    })

4.删除

exports.removeUser=function(uid){
    return User.destroy({
        where:{
            id:uid
        }.then(function(result){
            console.log('删除成功')
        }).catch(err=>{
            console.log('删除失败')
        })
    })

5.更新

exports.updateUser=function(uid){
    //根据id找到要更新的记录
    return User.findOne(uid)({
        where:{id:uid}
    }).then(function(u){
        //参数u就是要更新的记录(即对象)
        return u.update({
            usernaem:'lisa蓉',
            age:'21'
        })
    }).then(function(result){
        console.log('更新成功')
    }).catch(function(err){
        console.log('更新失败')
    })
}

6.查询

exports.getUsers=function(){
    return User.findAll({
        raw:true//只显示原始数据
    }).then(function(result){
        console.log(result)
    }).catch(function(err){
        console.log(err)
    })
}

7.其他查询

exports.likeFind=function(){
    return User.findAll({
        raw:true,
        where:{
            // usernaem:{
            //     [op.like]:'贾%'//模糊查询
            // },
            age:{
                 [op.in]:[18,20]//两数中的一个数
                 //17-20之间
                // [op.between]:[17,20]
            }
        }
    }).then(function(result){
        console.log(result)
    }).catch(function(err){
        console.log(err)
    })
}
exports.andFind=function(){
    return User.findAll({
        raw:true,
        where:{
            usernaem:{
                [op.like]:'小%'
            },
            age:{
                [op.between]:[17,20]
            }
        }
    }).then(function(result){
        console.log(result)
    }).catch(function(err){
        console.log(err)
    })
}
exports.orFind=function(){
    return User.findAll({
        raw:true,
        where:{
            [op.or]:{
                usernaem:{
                    [op.like]:'小%'
                },
                age:{
                    [op.between]:[17,20]
                }
            }
            
        }
    }).then(function(result){
        console.log(result)
    }).catch(function(err){
        console.log(err)
    })
}

//排序
exports.orderFind=function(){
    return User.findAll({
        raw:true,
        order:[
             ['age','desc']
        ]
        
    }).then(function(result){
        console.log(result)
    }).catch(function(err){
        console.log(err)
    })
}





//分页查询
exports.limitFind=function(){
    return User.findAll({
        raw:true,
        limit:3,//查询的记录数
        offset:2//查询的起始位置
    }).then(function(result){
        console.log(result)
    }).catch(function(err){
        console.log(err)
    })
}


//带sql语句的查询(自定义sql语句的查询)
exports.queryUser=function(){
    return sequelize.query('select * from myuser',{type:Sequelize.QueryTypes.SELECT})
    .then(function(result){
        console.log(result)
    }).catch(function(err){
        console.log(err)
    })
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值