如何在Node.js TypeORM代码中访问无实体的外部表?
使用TypeORM访问外部数据库视图的几种方法
1. 为外部视图创建对应实体类
即使是外部视图,也可以通过创建ViewEntity实体类来映射,之后就能像操作自有表一样用Repository访问:
import { Entity, Column, ViewEntity } from "typeorm"; // 替换成你的外部视图名称和对应schema路径 @ViewEntity({ name: "external_employee_view", expression: `SELECT * FROM external_schema.external_employee_view` }) export class ExternalEmployeeView { @Column() id: number; @Column() employee_name: string; // 按需添加视图中对应的其他字段 }
调用方式和自有表完全一致:
const externalViewRepo = AppDatasource.getRepository(ExternalEmployeeView); const viewData = await externalViewRepo.find();
2. 直接执行原生SQL查询
如果不想创建实体,直接用TypeORM的原生查询方法访问:
// 基础查询 const viewData = await AppDatasource.query(`SELECT * FROM external_schema.external_employee_view`); // 参数化查询(避免SQL注入风险) const targetId = 123; const viewData = await AppDatasource.query( `SELECT * FROM external_schema.external_employee_view WHERE id = ?`, [targetId] );
3. 使用QueryBuilder构建查询
用QueryBuilder可以更灵活地添加过滤、排序等条件,适合复杂查询场景:
const viewData = await AppDatasource .createQueryBuilder() .select("*") .from("external_schema.external_employee_view", "ext_view") .where("ext_view.department = :dept", { dept: "研发部" }) .orderBy("ext_view.join_date", "DESC") .getRawMany(); // 返回原始数据对象数组
内容的提问来源于stack exchange,提问作者Sheikh Umar 5522
相关产品推荐
相关产品推荐

