写作不易,未经作者允许禁止以任何形式转载!
img
对象关系映射(Object Relational Mapping,简称ORM),是一种程序技术,实现面向对象编程语言中的内存对象与关系型数据库中的业务实体之间的关系映射。这样在我们操作数据库的时候,不再需要和复杂的SQL语句打交道,只需要简单地操作对象的属性和方法就可以直接实现对数据库中对应实体表的CRUD(增删改查)的操作。常见的ORM框架有Node.js 的TypeOrm、Sequlize,Java的Hibernate、Mybatis和Go的Gorm、GoRose等。
面向对象编程语言和关系型数据库都是目前最流行的技术,但他们的模型是不一样的。
仅示例,更多操作可参考
Sequelize 是一个基于 Promise 的 Node.js ORM, 目前支持 Postgres, MySQL, MariaDB, SQLite 以及 Microsoft SQL Server. 它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能。
Sequelize 遵从 语义版本控制。支持 Node v10 及更高版本以便使用 ES6 功能。
通过面向对象Class 和 关系型数据库的表建立连接 @Column 表示数据库的一列 @PrimaryKey 表示主键
import {
Column,
Model,
PrimaryKey,
Table,
} from '@gulu/sequelize/typescript';
enum GameType {
micro_game = 'micro_game',
mobile_game = 'mobile_game',
micro_app = 'micro_app',
}
@Table({ modelName: 'game', timestamps: false })
export default class GameModel extends Model {
@PrimaryKey
@Column
gameId!: string;
@Column
name!: string;
@Column
description?: string;
@Column
type!: GameType;
@Column
icon?: string;
@Column
isDelete!: number;
}
通过Model的方法操作数据库
import GameModel from '../model/game';
// 游戏列表查询服务
async query() {
return GameModel.findAll({
// 去除软删除字段
attributes: {
exclude: ['isDelete'],
},
// 查询未被软删除的游戏
where: {
isDelete: 0,
},
});
}
相当于以下SQL语句
select gameId, name, description, type, icon from game where isDelete = 0;
当然Sequlize也支持SQL语句查询
import GameModel from '../model/game';
// 游戏列表查询服务
async query() {
return GameModel.sequelize.query(
'select gameId, name, description, type, icon from game where isDelete = 0',
);
}
优点
缺点
什么是“持久化” 层