返回

NestJs框架开发实战:构建股票估值查询系统(二)

前端

引入TypeOrm

首先,我们需要在项目中引入TypeOrm模块。在您的终端中,运行以下命令:

npm install @nestjs/typeorm typeorm

配置TypeOrm

在您的NestJs应用程序中,您需要创建一个TypeOrm模块来配置数据库连接。在您的app.module.ts文件中,添加以下代码:

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'password',
      database: 'stock_valuation',
      entities: [],
      synchronize: true,
    }),
  ],
})
export class AppModule {}

在上面的代码中,我们配置了TypeOrm连接到MySQL数据库。您需要根据您的实际情况修改数据库连接信息,例如主机名、端口号、用户名、密码和数据库名称。

定义实体类

实体类是TypeOrm用来映射数据库表的类。在您的项目中,您需要定义一个实体类来映射股票估值表。在您的src/entities目录下,创建一个名为StockValuation.ts的文件,并添加以下代码:

import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';

@Entity()
export class StockValuation {

  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  stock_symbol: string;

  @Column()
  stock_name: string;

  @Column()
  current_price: number;

  @Column()
  earnings_per_share: number;

  @Column()
  price_to_earnings_ratio: number;

  @Column()
  dividend_yield: number;

  @Column()
  market_capitalization: number;

  @Column()
  debt_to_equity_ratio: number;

  @Column()
  return_on_equity: number;

  @Column()
  return_on_assets: number;

  @Column()
  gross_profit_margin: number;

  @Column()
  operating_profit_margin: number;

  @Column()
  net_profit_margin: number;

}

在上面的代码中,我们定义了一个实体类StockValuation,它映射了股票估值表的结构。每个字段对应表中的一列。

使用TypeOrm进行CRUD操作

现在,我们可以使用TypeOrm进行CRUD操作了。在您的src/services目录下,创建一个名为StockValuationService.ts的文件,并添加以下代码:

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { StockValuation } from '../entities/StockValuation';

@Injectable()
export class StockValuationService {

  constructor(
    @InjectRepository(StockValuation)
    private stockValuationRepository: Repository<StockValuation>,
  ) {}

  async findAll(): Promise<StockValuation[]> {
    return await this.stockValuationRepository.find();
  }

  async findOne(id: number): Promise<StockValuation> {
    return await this.stockValuationRepository.findOne(id);
  }

  async create(stockValuation: StockValuation): Promise<StockValuation> {
    return await this.stockValuationRepository.save(stockValuation);
  }

  async update(id: number, stockValuation: StockValuation): Promise<StockValuation> {
    const existingStockValuation = await this.stockValuationRepository.findOne(id);
    existingStockValuation.stock_symbol = stockValuation.stock_symbol;
    existingStockValuation.stock_name = stockValuation.stock_name;
    existingStockValuation.current_price = stockValuation.current_price;
    existingStockValuation.earnings_per_share = stockValuation.earnings_per_share;
    existingStockValuation.price_to_earnings_ratio = stockValuation.price_to_earnings_ratio;
    existingStockValuation.dividend_yield = stockValuation.dividend_yield;
    existingStockValuation.market_capitalization = stockValuation.market_capitalization;
    existingStockValuation.debt_to_equity_ratio = stockValuation.debt_to_equity_ratio;
    existingStockValuation.return_on_equity = stockValuation.return_on_equity;
    existingStockValuation.return_on_assets = stockValuation.return_on_assets;
    existingStockValuation.gross_profit_margin = stockValuation.gross_profit_margin;
    existingStockValuation.operating_profit_margin = stockValuation.operating_profit_margin;
    existingStockValuation.net_profit_margin = stockValuation.net_profit_margin;
    return await this.stockValuationRepository.save(existingStockValuation);
  }

  async delete(id: number): Promise<void> {
    await this.stockValuationRepository.delete(id);
  }

}

在上面的代码中,我们定义了一个服务类StockValuationService,它提供了CRUD操作的方法。您可以使用这些方法来查询、添加、更新和删除股票估值数据。

结语

在本文中,我们介绍了如何使用TypeOrm和MySQL数据库构建股票估值查询系统。我们详细讲解了如何配置TypeOrm、定义实体类和使用TypeOrm进行CRUD操作。通过这些步骤,您可以轻松构建功能丰富的股票估值查询系统。