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

文章问题导向

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
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用 NestJS 和 TypeORM 操作 MySQL 数据库的 user 表的示例代码: 首先,你需要安装必要的依赖: ```bash npm install --save @nestjs/typeorm typeorm mysql ``` 接下来,创建一个 User 实体类,用于映射 user 表数据: ```typescript import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column() name: string; @Column() age: number; @Column() email: string; } ``` 接着,在你的模块中导入 TypeORM 模块和 User 实体类,并配置 TypeORM 的连接信息: ```typescript import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { User } from './user.entity'; @Module({ imports: [ TypeOrmModule.forRoot({ type: 'mysql', host: 'localhost', port: 3306, username: 'root', password: 'password', database: 'test', entities: [User], synchronize: true, }), TypeOrmModule.forFeature([User]), ], }) export class AppModule {} ``` 现在,你可以在你的服务中注入 TypeORM 的 Repository 对象,并使用它来操作 user 表了: ```typescript import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { User } from './user.entity'; @Injectable() export class UserService { constructor( @InjectRepository(User) private readonly userRepository: Repository<User>, ) {} async findAll(): Promise<User[]> { return this.userRepository.find(); } async create(user: User): Promise<User> { return this.userRepository.save(user); } async update(user: User): Promise<User> { return this.userRepository.save(user); } async delete(id: number): Promise<void> { await this.userRepository.delete(id); } } ``` 上面的代码中,我们注入了 UserRepository 对象,并使用它提供的方法来实现了查询、新增、更新和删除 user 数据的操作。 希望这个示例代码对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值