寫做不易,未經做者容許禁止以任何形式轉載!
若是以爲文章不錯,歡迎關注、點贊和分享!
持續分享技術博文,關注微信公衆號 👉🏻 前端LeBron前端
對象關係映射(Object Relational Mapping,簡稱ORM),是一種程序技術,實現面向對象編程語言中的內存對象與關係型數據庫中的業務實體之間的關係映射。這樣在咱們操做數據庫的時候,再也不須要和複雜的SQL語句打交道,只須要簡單地操做對象的屬性和方法就能夠直接實現對數據庫中對應實體表的CRUD(增刪改查)的操做。常見的ORM框架有Node.js 的TypeOrm、Sequlize,Java的Hibernate、Mybatis和Go的Gorm、GoRose等。git
ORM的方法論基於三個核心原則github
面向對象編程語言和關係型數據庫都是目前最流行的技術,但他們的模型是不同的。web
僅示例,更多操做可參考sql
Sequelize 是一個基於 Promise 的 Node.js ORM, 目前支持 Postgres, MySQL, MariaDB, SQLite 以及 Microsoft SQL Server. 它具備強大的事務支持, 關聯關係, 預讀和延遲加載,讀取複製等功能。typescript
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',
);
}
複製代碼
優勢
缺點
什麼是「持久化」 層