ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Nest通过TypeORM操作MySQL (二)

2021-08-07 20:35:21  阅读:242  来源: 互联网

标签:string name Menu Nest entity menu MySQL id TypeORM


前一篇讲述了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很类似。实际使用中会有更多的高级需求,如多表联合,主从等。

标签:string,name,Menu,Nest,entity,menu,MySQL,id,TypeORM
来源: https://www.cnblogs.com/Andy1982/p/15113110.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有