对于软件开发的理解
软件开发最重要的是数据处理,与此相关的是前端负责数据的交互,后端负责数据的增删改查。
对于一个后端来说,前端技术最陌生的应该是css了,反过来,前端对后端技术最陌生的应该是数据库,前端的数据保存要么保存在本地,要么通过接口间接保存,本文就会讲一下前端同学可能会用的一个技术typeorm,一个用于nodejs的ORM,ORM就是Object Relational Mapping,即提供了对象到数据库的映射,通过操作对象就可以对数据库进行修改。
另外由于本文是介绍用typeorm操作关系型数据库,如果想先了解一下其他背景知识
- 比如数据库,可以参考数据库基本概念和分类
- 比如sql可以参考 # 常见编程语言入门:sql
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 用来进行比较复杂的操作