前言
ORM即Object Relational Mapping,中文翻译过来就是对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。在nodejs中也有比较好用的ORM框架,比如TypeORM,Sequelize等等,但基本上都是重量级的,如果自己先实现一个简单的对数据库的增删改查,使用它们就感觉有点大材小用了。因此本文用简短的一百多行代码实现一个简单的ORM框架,使用TypeScript以及mysql包。
开始之前
安装typescript
npm install -g typescript
新建nodejs项目
npm init
安装mysql包
npm install --save mysql
在项目目录下,新建tsconfig.json文件,添加文件内容如下
{
"compilerOptions": {
"module": "commonjs",
"target": "es2018",
"sourceMap": true,
"outDir": "./dist",
"pretty": true,
"baseUrl": "./lib",
"moduleResolution": "node"
},
"include": [
"lib/**/*.ts",
"lib/*.ts"
],
"exclude": [
"node_modules"
]
}
在项目目录新建lib文件夹来存放.ts文件
注:在tsconfig.json目录下使用tsc命令能将ts文件打包成js文件,然后再使用node命令来运行js文件,或者使用node-ts来运行ts文件,需要安装node-ts包
npm install -g node-ts
ORM的简单实现
mysql.ts文件,主要实现连接mysql,以及一下基本的增删改查函数
import * as MySql from "mysql";
// 使用连接池
const mysqlPool = MySql.createPool({
host: "localhost",
user: "root",
password: "",
port: 3306,
database: "blogapp",
connectionLimit: 10000
});
const timeout = 4000;
export interface ISqlResults {
results: Array<any>;
fields: Object;
}
interface IQueryObject {
[name: string]: string | number
}
// 实现增删改查基本方法
export const sqlQuery = (sql: MySql.QueryOptions) => new Promise((resolve, reject) =>
mysqlPool.query(sql,
(err, results, fields) => err ? reject(err) : resolve(<ISqlResults>{ results, fields })
)
);
export const and = (d