nodejs学习笔记(31) - nest.js框架学习(2):连接以及操作数据库
ORM
初识
ORM
是Object Relational Mapping
的缩写,译为“对象关系映射”,它解决了对象和关系型数据库之间的数据交互问题。使用面向对象编程时,数据很多时候都存储在对象里面,具体来说是存储在对象的各个属性(也称成员变量)中。例如有一个User
类,它的id
、username
、password
、email
属性都可以用来记录用户信息。当我们需要把对象中的数据存储到数据库时,按照传统思路,就得手动编写SQL
语句,将对象的属性值提取到SQL
语句中,然后再调用相关方法执行SQL
语句。而有了
ORM
技术以后,只要提前配置好对象和数据库之间的映射关系,ORM
就可以自动生成SQL
语句,并将对象中的数据自动存储到数据库中,整个过程不需要人工干预。在Java
中,ORM
一般使用XML
或者注解来配置对象和数据库之间的映射关系。而nestjs
官方推荐使用的orm
工具为typeOrm
传统的sql
语句
SELECT id,name,age FROM girls where id=1 |
orm
代码
// 就像操作对象一样 |
使用TypeOrm
- 安装
npm install --save @nestjs/typeorm typeorm mysql2 |
- 引入
TypeORM
/* ------------- /src/app.module.ts --------------- */ |
看到全绿输出则证明连接数据库成功
数据库操作-TypeORM
的实体操作
ORM
中的实体其实就是把数据库映射成对象的那个类。这个类可以模拟数据库表,定义其中的字段。因为映射的过程ORM
已经为我们作好了,所以我们只需要定义实体类,当实体类定义好以后,就可操作数据库了。这里所谓的实体,就是Object
。我们要想在nestjs
中实现操作数据库,光连接数据库是不足够的,我们要使用typeorm
去创建一个实体,去对应数据库中对应的表,建立连接关系,这样我们才可以操作数据库
创建实体
- 我们在想要操作的模块中新建一个文件夹
entities
,然后在里边新建boys.entity.ts
编写实体。
// 编写实体,用于一一对应数据库中的数据映射关系 |
- 编写好类实体之后,需要在
module
里进行引入,打开boys.module.ts
文件,先用import
引入TypeOrmModule
。
import { Module } from '@nestjs/common'; |
- 随后我们打开数据库查看是否新建了一张表
boys
,若是存在说明我们成功通过实体让整个nest
项目连接到数据库了!
下面补充一下数据库中的类型以及typeOrm
中常用的装饰符模块
- 下面给出所有的
mysql
的数据类型
int, tinyint, smallint, mediumint, bigint, float, double, dec, decimal, |
- 自动生成时间 在开发中经常需要在保存数据时同时记录时间,这时候可以使用
@CreateDateColumn( )
装饰器来制作。我们先进行引入以及使用。
import {CreateDateColumn} from 'typeorm' |
- 自动生成列 开发时也会遇到生成一个不规则、不重复的自动编号,这时候就可以使用
Generated( )
装饰器。
import {CreateDateColumn} from 'typeorm' |
操作数据库实现数据的增删改查
- 经过上面的操作,我们已经成功连接到数据库且在数据库于项目中成功建立映射关系,下面我们开始编写接口,实现操作数据库,增删改查操作,业务逻辑还是在
service
里面写,controller
中还是作路由操作
完整的源码展示:
app.module.ts
(项目的整体模块)
import { Module } from '@nestjs/common'; |
boys.module.ts
(操作对应的模块)
import { Module } from '@nestjs/common'; |
boys.controller.ts
模块控制层
/* controller层主要编写接口,不写业务逻辑 */ |
boys.service.ts
(service
层主要编写接口的业务逻辑,操作数据库)
import { Injectable } from '@nestjs/common'; |
boys.entities.ts
(entities
层,主要用于建立数据库与对应实体的映射关系)
// 编写实体,用于一一对应数据库中的数据映射关系 |
结果展示:
- 新增数据
- 修改数据
- 查找数据
- 删除数据
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0许可协议。转载请注明来自 肥林の仓库