一、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)
})
}