typeorm相关概念

235 阅读2分钟

对于软件开发的理解

软件开发最重要的是数据处理,与此相关的是前端负责数据的交互,后端负责数据的增删改查。

对于一个后端来说,前端技术最陌生的应该是css了,反过来,前端对后端技术最陌生的应该是数据库,前端的数据保存要么保存在本地,要么通过接口间接保存,本文就会讲一下前端同学可能会用的一个技术typeorm,一个用于nodejs的ORM,ORM就是Object Relational Mapping,即提供了对象到数据库的映射,通过操作对象就可以对数据库进行修改。

另外由于本文是介绍用typeorm操作关系型数据库,如果想先了解一下其他背景知识

mysql基本理解

这里的相关讲解会以mysql为例。 每个数据库中会有多个表,每个表类似于一个excel,其中每一行表示一条数据,每一列表示数据的一个属性,每个属性的数据类型相同。
这些属性中有几个特殊的字段,一个字段叫主键,所有数据应该有唯一的主键,比如有一个产品表,主键可以是产品id,还有的叫外键,用来关联其他表中的数据,比如可以关键产地表中的一个或多个产地。

typeorm

和mysql对应关系

正如前面所说,在typeorm中我们直接操作的是对象,每个表对应一个被 @Entity()标记的class,class中被@column标记的字段就是表中的列,因为某些字段还有其他作用,因此会有多种column,比如

import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"

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

    @Column()
    firstName: string

    @Column()
    lastName: string

    @Column()
    isActive: boolean
}

会生成这样一个表

+-------------+--------------+----------------------------+
|                          user                           |
+-------------+--------------+----------------------------+
| id          | int(11)      | PRIMARY KEY AUTO_INCREMENT |
| firstName   | varchar(255) |                            |
| lastName    | varchar(255) |                            |
| isActive    | boolean      |                            |
+-------------+--------------+----------------------------+

关系

前面讲了外键,外键就是关联到另外表的,这种关联就是关系,包括

  • 一对一 比如学生和家教
  • 一对多 某一科的老师和学生
  • 多对一 学生和某一科的老师
  • 多对多 某个班的所有老师和所有学生

当我们操作一个表时,可以同时操作另外的表,比如我们查询一张表时,可以将另一张表的相关字段作为属性带出。

数据库操作

数据库操作这里提供了三种方式

  • EntityManager 可以对所有entity进行增删改查
  • Repository 用来操作具体的entity
  • QueryBuilder 用来进行比较复杂的操作