📜  typeorm 原始查询 (1)

📅  最后修改于: 2023-12-03 15:20:42.798000             🧑  作者: Mango

TypeORM 原始查询

TypeORM 是一个基于 TypeScript 的 ORM(Object-Relational Mapping)框架,它支持多种数据库系统,包括 MySQL、PostgreSQL、Oracle、SQL Server 等。TypeORM 提供了一种方便的方式来对数据库进行操作,可以轻松实现数据的增删改查等功能。

在 TypeORM 中,我们可以使用原始查询来对数据库进行操作。原始查询是 SQL 语句的字符串表示形式,可以直接传递给数据库驱动程序执行。使用原始查询可以完全掌控 SQL 语句的生成过程,更灵活地进行数据操作。

基本语法

TypeORM 中的原始查询使用 createNativeQuery 方法来创建。该方法可以接受一个包含 SQL 语句的字符串作为参数,并返回一个 Query 对象。

import { getManager } from "typeorm";

const entityManager = getManager();
const sql = "SELECT * FROM users WHERE name = :name";
const params = { name: "Alice" };
const query = entityManager.createNativeQuery(sql, params);
const results = await query.execute();

在上面的示例中,我们首先获取了一个 entityManager 对象,然后使用 createNativeQuery 方法创建了一个原始查询对象。通过该对象的 execute 方法,可以执行 SQL 语句并获取结果。

在 SQL 语句中,我们可以使用参数 placeholder 来表示需要动态传入的值。在 TypeORM 中,可以使用 : 符号加上参数名来表示参数 placeholder。在执行原始查询时,可以通过第二个参数传递一个对象,该对象的属性名即为参数名,属性值即为参数值。

返回结果

原始查询的执行结果是一个数组,数组中的每个元素对应一行查询结果。每行查询结果都是一个对象,对象的属性名对应查询结果集中的列名,属性值对应列的值。例如:

const results = [
  { id: 1, name: "Alice" },
  { id: 2, name: "Bob" },
  { id: 3, name: "Charlie" }
];

可以将结果用于各种用途,例如渲染模板、更新状态等。注意,原始查询返回的结果没有经过实体映射,因此可能需要手动进行类型转换和数据清洗。

总结

TypeORM 的原始查询提供了一种灵活的方式来进行数据库操作,特别是在需要执行复杂的 SQL 语句时非常有用。需要注意的是,原始查询可能会带来安全风险,因此在使用时需要谨慎。同时,为了避免 SQL 注入等安全问题,建议使用参数 placeholder 来动态生成 SQL 语句。