📜  TypeORM-关系(1)

📅  最后修改于: 2023-12-03 15:35:24.050000             🧑  作者: Mango

TypeORM-关系

TypeORM是一个支持多种数据库的ORM框架,可以提供良好的面向对象的API,可进行熟悉的CRUD操作,同时也能够处理更高级的事务和查询。TypeORM支持多种关系,本文将向程序员介绍TypeORM的关系。

一对一关系

在TypeORM中,一对一关系表示两个实体之间的关联,其中每个实体都只与其他实体中一个实体关联。在ORM映射中,使用@OneToOne修饰器表示一对一关系。

下面是一个使用TypeORM@OneToOne表示一对一关系的示例:

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @OneToOne(() => UserProfile)
  profile: UserProfile;
}

@Entity()
export class UserProfile {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  age: number;

  @OneToOne(() => User, user => user.profile)
  user: User;
}

上面的代码展示了一个用户和一个用户资料实体之间的一对一关系。User实体中的@OneToOne注释声明了它与UserProfile实体之间的关系。同样地,UserProfile实体中的@OneToOne注释也声明了它与User实体之间的关系。

一对多关系

在TypeORM中,一对多关系表示一个实体与另一个实体之间的关系,其中第一个实体可以有多个与第二个实体相关联的实体。在TypeORM的ORM映射中,使用@OneToMany来表示一对多关系。

考虑到一个博客文章实体与评论实体之间的一对多关系:

@Entity()
export class Post {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  @OneToMany(() => Comment, comment => comment.post)
  comments: Comment[];
}

@Entity()
export class Comment {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  text: string;

  @ManyToOne(() => Post, post => post.comments)
  post: Post;
}

上面的代码表示了与一篇博客文章相关联的评论实体。Post实体使用@OneToMany注释声明与Comment实体的关系,指定了评论实体数组。另外,Comment实体使用@ManyToOne注释声明与Post实体的关系。

多对多关系

在TypeORM中,多对多关系表示两个实体之间的关系,其中每个实体可以与多个与另一个实体相关联的实体关联。在TypeORM的ORM映射中,使用@ManyToMany来表示多对多关系。

考虑到学生与课程的多对多关系:

@Entity()
export class Student {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @ManyToMany(() => Course, course => course.students)
  courses: Course[];
}

@Entity()
export class Course {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  @ManyToMany(() => Student, student => student.courses)
  students: Student[];
}

上面的代码表示了两个实体之间的多对多关系,其中一个学生可以选择多门课程,同时一门课程可以被多个学生选修。在Student实体中,使用@ManyToMany注释声明与Course实体的关系。另外,在Course实体中也使用@ManyToMany注释声明与Student实体的关系。

总结

本文介绍了TypeORM的三种关系,分别是一对一关系、一对多关系和多对多关系。TypeORM支持多种数据库,并提供面向对象的API,可进行熟悉的CRUD操作,同时也能够处理更高级的事务和查询。TypeORM提供了良好的关系持久性支持,使程序员能够轻松处理多种关系。