📜  typeorm 原始 sql (1)

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

TypeORM 原始 SQL

TypeORM是一个强大的ORM框架,不仅支持TypeScript和JavaScript,还支持多种关系型数据库,如MySQL、PostgreSQL、Oracle等。在TypeORM中,我们可以使用TypeScript编写ORM实体类,这样可以减少手写数据库查询语句的工作量。不过有时候我们也需要自己编写一些原始的SQL语句来完成一些比较复杂的查询操作。这时候就需要使用TypeORM提供的原始SQL功能了。本文将对TypeORM的原始SQL功能进行详细介绍。

基本用法

TypeORM提供了两种方式来执行原始SQL语句:

  • 执行一个SQL查询并返回结果
  • 执行一个SQL修改命令并返回影响的行数

下面我们分别介绍这两种用法。

执行查询

执行查询的方法是query(),它接受一个原始的SQL语句,返回查询结果。例如:

const users = await connection.query("SELECT * FROM users");
console.log(users);

在这里,我们执行了一个查询,获取了users表中的所有记录。这些记录将存储在users变量中。

执行修改

执行修改的方法是queryRunner.query(),它接受一个原始的SQL语句,返回影响的行数。例如:

await connection.transaction(async (manager) => {
  const queryRunner = manager.queryRunner;
  const result = await queryRunner.query("UPDATE users SET firstName = 'NewName' WHERE id = 1");
  console.log(result);
});

在这里,我们执行了一个修改命令,将users表中id为1的记录的firstName字段修改为NewName。修改后的记录数量将存储在result变量中。

参数化查询

在编写原始SQL语句时,我们需要考虑SQL注入攻击的问题。为了避免这种攻击,我们可以使用参数化查询。

参数化查询是指将变量和查询语句分开处理,这样可以防止恶意用户在变量中嵌入SQL代码。在TypeORM中,我们可以使用query()方法的第二个参数来指定查询参数。例如:

const userId = 1;
const user = await connection.query("SELECT * FROM users WHERE id = $1", [userId]);
console.log(user);

在这里,我们执行了一个查询,查询users表中id为1的记录。查询中使用了$1来代替变量userId[userId]数组为查询参数。

总结

TypeORM的原始SQL功能可以让我们灵活地编写复杂的查询语句和修改命令。在使用时,我们需要注意避免SQL注入攻击,可以使用参数化查询来解决这个问题。