TypeORM 简单入门
前言
在使用NestJS过程中接触到了 TypeORM 这个ORM框架。
这里以一个 ToDoList 为案例,介绍一下这个库的使用。
中文文档:https://typeorm.bootcss.com/
安装和引入
安装
npm install --save @nestjs/typeorm typeorm mysql2
引入数据库
// app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
username: 'root',
password: 'root',
host: 'localhost',
port: 3306,
database: 'todolistdb',
entities: [__dirname + '/**/*.entity{.ts,.js}'], //实体文件
synchronize: true, //synchronize字段代表是否自动将实体类同步到数据库
retryDelay: 500, //重试连接数据库间隔
retryAttempts: 10, //重试连接数据库的次数
autoLoadEntities: true, //如果为true,将自动加载实体 forFeature()方法注册的每个实体都将自动添加到配置对象的实体数组中
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule { }
建立todo对象
// src/todo/entities/todo.entity.ts
import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";
@Entity()
export class Todo {
// 自增列
@PrimaryGeneratedColumn()
id: number
@Column()
content: string
@Column()
status: boolean
}
增删改查
以一个简单的 ToDoList 为例
// src/todo/todo.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Result } from 'src/config/resultType';
import { Repository } from 'typeorm';
import { CreateTodoDto } from './dto/create-todo.dto';
import { UpdateTodoDto } from './dto/update-todo.dto';
import { Todo } from './entities/todo.entity';
@Injectable()
export class TodoService {
constructor(@InjectRepository(Todo) private todoRepository: Repository<Todo>) { }
async create(createTodoDto: CreateTodoDto) {
let res = await this.todoRepository.insert(createTodoDto)
return Result.success(res)
}
async findAll() {
let res = await this.todoRepository.find()
return Result.success(res)
}
async findOne(id: number) {
let res = await this.todoRepository.findOne({ where: { id } })
return Result.success(res)
}
async update(id: number, updateTodoDto: UpdateTodoDto) {
let res = await this.todoRepository.update(id, updateTodoDto)
return Result.success(res)
}
async remove(id: number) {
let res = await this.todoRepository.delete(id)
return Result.success(res)
}
}
// src/config/resultType.ts
export enum stateCode {
OK = 200,
UNEXPECT = 400, //未知错误
NEED_AUTH = 401, //需要登录
NO_FIND = 402, //找不到相关资源
BAD_REQUEST = 403, //请求错误
EXISTED = 408, //字段已存在
SEVER_ERR = 500, //服务器错误
}
export class Result {
constructor(private code: stateCode,
private data: Object | Array<any> | string | null,
private msg: string
) { }
public static success(data: Object | Array<any> | string | null) {
return new Result(200, data, "success")
}
public static fail(code: stateCode, msg: string) {
return new Result(code, null, msg)
}
}
上一篇:NestJS 实现 JWT