ORM
在上文中我们讲了如何使用node.js mysql2连接数据库,接下来讲讲ORM
下面摘一段百科对ORM的介绍
对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
讲人话就是,在常用面向对象的语言中,我们用class(不一定要class)来映射数据库中的表,用实例化对象来映射表中的每一条数据,每一栏用对象属性表示
比如下面这个类可以映射为数据库中的表,有两列数据,分别是name和age
class User {
name: string
age: string
}
下载量
目前在nodejs中常用的ORM有prisma,sequlize,typeorm等等
下面是他们的下载量对比
typeorm
接下来我们就来尝试一下如何用typeorm来连接数据库, typeorm提供了一些装饰器让我们来描述一张表的结构
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()
export class User {
@Column()
name: string;
@Column()
age: string;
}
CRUD的时候只要像操作一个对象那样操作即可,框架会自动帮你生成sql语句执行,这样就可以专注于业务而无需过多关注数据库的细节了
const user = new User();
user.name = "jym";
user.age = 18;
await repository.save(user);
const allUsers = await repository.find();
const u = await repository.findOne({ name: "jym" });
await repository.remove(u);
sequlize
接下来我们就来尝试一下如何用sequlize来连接数据库, sequlize提供了define让我们来定义一张表的结构
const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize('jym', 'root', 'password', {
host: 'localhost',
dialect: 'mysql'
});
const User = sequelize.define('User', {
// 在这里定义模型属性
name: {
type: DataTypes.STRING,
},
age: {
type: DataTypes.STRING
}
});
同样,对一行数据的CRUD可以映射为对象实例的操作
const u = await User.create({ name: "jym" });
console.log(u.name); // "jym"
await u.save();
// 查询所有用户
const users = await User.findAll();
...
const u = await User.findOne({ where: { name: 'jym' } });
u.name = 'test'
u.save()
u.destroy()
prisma
prisma也是差不多的方式,只不过prisma提供了另一套 Prisma schema语法来描述自己的应用模型,相比上面两个,它的语法更简洁,描述能力也不比class语法差,其实定义一套这样的语法也满足依赖倒置的原则,这样在以后要扩展其他语言比如GO,JAVA之类的也很方便。
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
const user = await prisma.user.findUnique({
where: {
name: 'jym',
},
})
接下来会进一步讲解如何用node.js开发一个应用,感兴趣的朋友记得关注一波,谢谢支持
以上就是详解如何使用Node.js连接数据库ORM的详细内容,更多关于Node.js连接数据库ORM的资料请关注编程网其它相关文章!