Nodejs相关ORM框架分析

本文对比分析了Node.js的几种ORM框架,包括TypeORM、Sequelize和ORM2。介绍了ORM框架的概念,Active Record和Data Mapper模式,并探讨了它们在不同项目中的适用性。TypeORM以其类似hibernate的方式吸引开发者,Sequelize文档完善,功能强大,而ORM2则因文档不足和数据库支持有限显得不够吸引人。
摘要由CSDN通过智能技术生成

概述

写这篇blog的原因,想找个node的ORM框架用用,确很难找到一篇对比分析这些ORM框架的文章,唯一找到了一篇,居然是通过star数来论英雄,我觉着很难服众,于是就找几个看看。后来又不想分析,因为我发现node这种野蛮生长,滋生这些ORM轮子比比皆是,远比我想象的多;后来又觉着可以写,作为一个java出身业余研究node的就想通过java的ORM框架来洞悉node这群ORM框架的是非曲直,于是挑了几个框架小扯一篇。

ORM框架

ORM框架:Object Relational Mapping,对象-关系-映射,所以说ORM框架就是用面向对象的方式和目前的关系型数据库做匹配,java开发者目前主流的hibernate、mybatis很熟悉了,JDBC原始驱动的方式想必也不在成为主流了。下面介绍几款node的ORM框架,介绍之前先介绍ORM的两种模式:

Active Record 模式:活动记录模式,领域模型模式一个模型类对应关系型数据库中的一个表,模型类的一个实例对应表中的一行记录。这个不难理解,比较简单,但是不够灵活,再看另一种模式,比较一下

Data Mapper 模式:数据映射模式,领域模型对象和数据表是松耦合关系,只进行业务逻辑的处理,和数据层解耦。需要一个实体管理器来将模型和持久化层做对应,这样一来,灵活性就高,当然复杂性也增加了。

所以说,Data Mapper模式对业务代码干预少,Active Record模式直接在对象上CRUD,代码编写也更方便,这就像hibernate和mybatis两种框架,如果想深入研究,可以了解一下

有这么一句话很认同,ActiveRecord更加适合快速开发成型的短期简单项目,而DataMapper更加适合长线开发,保持业务逻辑与数据存储独立的复杂项目。除此之外,技术选型还要考虑其他因素,比如项目历史背景等等。

TypeORM

TypeORM 是一个 ORM 框架,详细介绍见 TypeORM 官方介绍,TypeORM 也借鉴了hibernate,所以你会发现它特别熟悉,尤其是装饰类的方式。

闲话少说,直接用CLI 命令快速构建项目

npm install typeorm -g

创建项目

typeorm init --name MyProject --database mysql

name 是项目的名称,database 是将使用的数据库,TypeORM 支持多种数据库。

生成文档结构

MyProject
├── src              // TypeScript 代码
│   ├── entity       // 存储实体(数据库模型)的位置
│   │   └── User.ts  // 示例 entity
│   ├── migration    // 存储迁移的目录
│   └── index.ts     // 程序执行主文件
├── .gitignore       // gitignore文件
├── ormconfig.json   // ORM和数据库连接配置
├── package.json     // node module 依赖
├── README.md        // 简单的 readme 文件
└── tsconfig.json    // TypeScript 编译选项

修改 ormconfig.json 数据库配置文件,直接运行就可以了

npm start

看一下实体model,user类

import {
   Entity, PrimaryGeneratedColumn, Column} from "typeorm";
@Entity()
export class User {
   
​    @PrimaryGeneratedColumn()
​    id: number;

​    @Column()
​    firstName: string;

​    @Column()
​    lastName: string;

​    @Column()
​    age: number;
}

CRUD操作:逻辑层

import "reflect-metadata";
import {
   createConnection} from "typeorm";
import {
   User} from "./entity/User";

createConnection().then(async connection => {
   
​    console.log("Inserting a new user into the database...");const user = new User();
​    user.firstName = "Timber";
​    user.lastName = "Saw";
​    user.age = 25;await connection.manager.save(user);
​    console.log("Saved a new user with id: " + user.id);
​    console.log("Loading users from the database..."
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值