Nest通过TypeORM操作MySQL (二)

前一篇讲述了TypeORM的安装以及通过对象化的方式访问数据库。 然而很多场景下我们会需要更复杂的操作,如多表联合,然后映射为Entity。 本文在前一篇的基础上,用代码示例说明如何在TypeORM中实现SQL查询。

修改ormconfig.json, 增加新的配置项: Menu。与前一篇配置不同的是,此处有两个connection配置,默认使用的是default。
参考手册

[
  {
    "name": "default",
    "type": "mysql",
    "host": "localhost",
    "port": 3306,
    "username": "root",
    "password": "Password01!",
    "database": "dmp",
    "entities": ["dist/**/*.entity.js"],
    "synchronize": true
  },
  {
    "name": "Menu",
    "type": "mysql",
    "host": "localhost",
    "port": 3306,
    "username": "root",
    "password": "Password01!",
    "database": "dmp",
    "entities": ["dist/**/*.entity.js"]
  }
]

创建对象实体,这里由于是SQL查询映射而来,不是由数据库表映射,所以不需要在@Entity()上加表命参数

@Entity()
export class Menu {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ length: 45 })
  firstname: string;

  @Column({ length: 45 })
  familyname: string;

  @Column({ length: 200 })
  email: string;
}

service层,注意此处的createConnection的参数,对应了ormconfig.json中的name参数

import { Repository, createConnection } from 'typeorm';

async getMenu(id: number): Promise<Menu> {
    const connection = await createConnection('Menu');

    const userMenus = await connection
      .createQueryBuilder()
      .select('menu')
      .from(Menu, 'menu')
      .where('menu.id=:id', { id: id })
      .getOne();

    return userMenus;
}

Controller增加访问方法

@Get('/user/:id')
getMenu(@Param() params) {
  return this.service.getUserMenu(params.id);
}

至此,我们只是粗略了解了typeorm的基础使用方式,感觉同.net平台的entity framework很类似。实际使用中会有更多的高级需求,如多表联合,主从等。

posted @   老胡Andy  阅读(491)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示