乐闻世界logo
搜索文章和话题

如何在TypeORM queryBuilder中显示生成的SQL/原始SQL

1 个月前提问
1 个月前修改
浏览次数19

1个答案

1

在TypeORM中,使用queryBuilder构建查询时,有时候我们需要查看最终生成的SQL语句,以确保它符合我们的预期,或者用于调试目的。以下是几种方法来查看或打印出在TypeORM的queryBuilder中生成的SQL语句:

方法1:使用getQuerygetParameters

getQuery方法可以返回即将执行的SQL语句的字符串,而getParameters则返回一个对象,包含SQL语句中使用的所有参数。这种方法不会执行SQL语句。

javascript
import { getConnection } from "typeorm"; const userRepository = getConnection().getRepository(User); const queryBuilder = userRepository.createQueryBuilder("user") .select("user.name") .where("user.id = :id", { id: 1 }); const query = queryBuilder.getQuery(); const parameters = queryBuilder.getParameters(); console.log(query); // 输出SQL语句 console.log(parameters); // 输出{ id: 1 }

方法2:使用printSql

printSql方法是一个链式调用,可以直接在构建查询时使用。它会在控制台中打印出生成的SQL语句。这种方法同样不会执行SQL语句。

javascript
import { getConnection } from "typeorm"; const userRepository = getConnection().getRepository(User); userRepository.createQueryBuilder("user") .select("user.name") .where("user.id = :id", { id: 1 }) .printSql() .getMany();

方法3:监听query事件

如果你想全局地监控所有通过TypeORM执行的SQL语句,可以在创建连接时,添加一个logger选项来监听query事件。

javascript
import { createConnection } from "typeorm"; createConnection({ type: "mysql", host: "localhost", username: "test", password: "test", database: "test", entities: [ //...entities here ], logger: "advanced-console", logging: "all" // 这将会打印所有的SQL语句,包括查询 }).then(connection => { //...使用connection }).catch(error => console.log(error));

使用场景举例

假设我们正在开发一个电商应用,并想要检查一个用于获取用户最后订单详情的查询是否正确。这时,我们可以使用上述任一方法来打印和检查SQL语句,确保它正确地关联了用户和订单表,并且正确地过滤了数据。

通过这些方法,我们可以确保我们的应用在执行数据库查询时的透明度和正确性,同时帮助我们快速定位和解决可能的查询错误或性能问题。

2024年8月5日 00:40 回复

你的答案