nest-typeorm学习:数据库实体设计与操作

本文介绍了如何在NestJS中使用TypeORM进行数据库实体设计,包括实体装饰器的使用,如列字段参数,并展示了如何通过继承减少重复代码。同时,文章详细讲解了实体监听装饰器的生命周期,如@AfterLoad、@BeforeInsert等,帮助读者理解在操作数据库时如何更方便地处理数据。
摘要由CSDN通过智能技术生成

文章问题导向

typeorm的数据库实体如何编写?
数据库实体的监听装饰器如何使用?

如果你都有了答案,可以忽略本文章,或去nest学习导图寻找更多答案


注意

学习该文章,需要有一定的mysql知识基础
你已经会使用nest连接mysql,如果不会:去学习

实体设计

简单例子:下面讲解

import {
    Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn} from "typeorm";

@Entity({
    name: 'users' })
export class User {
   
    @PrimaryGeneratedColumn()
    id: number;         默认是int(11)类型

    @Column()
    username: string;   默认是varchar(255)类型

    @Column()
    password: string;
   
    @Column()
    status: boolean;
   
    @CreateDateColumn()
    created_at:date;
       
    @UpdateDateColumn()
    updated_at:date;

	@DeleteDateColumn()
    deleted_at:date;
}

装饰器说明

Entity                    实体声明,程序运行时,自动创建的数据库表,@Entity({
    name: 'users' }), name则是给该表命名,否则自动命名
PrimaryColumn             设置主键,没有自增
PrimaryGeneratedColumn    设置主键和自增,一般是id
Column                    设置数据库列字段,在下面说明
CreateDateColumn          创建时间,自动填写
UpdateDateColumn          更新时间,自动填写
DeleteDateColumn          删除时间,自动填写

列字段参数

写法:
@Column("int")
@Column("varchar", {
    length: 200 })
@Column({
    type: "int", length: 200 })  一般采用这种


常用选项参数:
@Column({
   
    type: 'varchar',    列的数据类型,参考mysql
    name: 'password',   数据库表中的列名,string,如果和装饰的字段是一样的可以不指定
    length: 30,         列类型的长度,number
    nullable: false,    是否允许为空,boolean,默认值是false
    select:false,      查询数据库时是否显示该字段,boolean,默认值是true,密码一般使用false
    comment: '密码'     数据库注释,stirng
})
password:string;

@Column({
   
    type:'varchar',  
    unique: true,      将列标记为唯一列,唯一约束,比如账号不能有相同的
})
username:string;

@Column({
   
    type:'tinyint',  
    default: () => 1,  默认值,创建时自动填写的值
    comment: '0:禁用,1:可用'
})
status:number;

@Column({
   
    type: 'enum',
    enum: ['male', 'female'],   枚举类型,只能是数组中的值
    default: 'male'   默认值          
})
gender:string;

完整例子

import {
   
  Column,
  Entity,
  PrimaryGeneratedColumn,
  CreateDateColumn,
  UpdateDateColumn,
} from 'ty
NestJS 中使用 TypeORM 连接达梦(DM)数据库,你需要安装必要的依赖并配置TypeORM连接。以下是大致步骤: 1. **安装依赖**: - 首先,确保已经安装了`nestjs`、`typeorm`和对应的`dm2-driver-typeorm`模块。可以使用npm或yarn来安装: ``` npm install @nestjs/typeorm dm2-driver-typeorm ``` 2. **配置项添加**: 在`package.json`文件中添加`typeorm`作为`dependencies`下的一项,并在`nestjs.config.ts`或单独的`ormconfig.js`文件中添加达梦数据库的相关配置。例子如下: ```javascript // ormconfig.js 或 nestjs.config.ts { type: 'DM', host: 'your_host', port: your_port, username: 'your_username', password: 'your_password', database: 'your_database_name', entities: ['src/**/*.entity.ts'], // 定义实体类的路径 synchronize: true, // 是否自动同步表结构,默认为true logging: false, // 关闭TypeORM的日志输出,如果需要可以开启 } ``` 3. **连接到模块**: 在你的 NestJS 应用的服务或模块中,注入`TypeOrmModule`来创建TypeORM的连接池: ```typescript import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { YourEntity } from './entities/your-entity.entity'; // 替换为你的实体名 @Module({ imports: [TypeOrmModule.forRootAsync({ useFactory: () => ({ ...getDmDatabaseConfig(), // 使用上述配置工厂函数 }), })], providers: [YourService], // 如果有服务引用TypeORM }) export class AppModule {} ``` 4. **使用连接**: 现在可以在服务中注入`EntityManager`或`Repository`来操作数据库: ```typescript import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { YourEntity } from './entities/your-entity.entity'; @Injectable() export class YourService { constructor( @InjectRepository(YourEntity) private readonly yourRepository: Repository<YourEntity>, ) {} async findAll() { return await this.yourRepository.find(); } } ``` 完成以上步骤后,你的 NestJS 应用就可以通过TypeORM连接达梦数据库进行操作了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值