Loopback 4中如何使用execute()方法执行多条原始SQL语句
LoopBack 4 Juggler 执行多条SQL语句的实现方式
LoopBack 4的多语句执行开关不在execute方法的入参里配置,需要在数据源初始化阶段把参数透传给底层数据库驱动,具体操作如下:
- 找到项目对应的数据源配置文件,通常路径为
src/datasources/[你的数据源名].datasource.ts - 在数据源的config配置对象中,根据使用的数据库类型添加对应配置项:
- 若使用MySQL/MariaDB(底层依赖
mysql/mysql2驱动),添加multipleStatements: true,该配置默认关闭,用于防范SQL注入风险 - 若使用PostgreSQL(底层依赖
pg驱动),默认支持多语句执行,无需额外添加配置 - 若使用SQL Server(底层依赖
mssql驱动),添加multipleActiveResultSets: true
MySQL场景的配置示例:
const config = { name: 'myDb', connector: 'mysql', host: '127.0.0.1', port: 3306, user: 'db_user', password: 'db_pass', database: 'my_db', // 开启多语句执行支持 multipleStatements: true };
- 保存配置后重启应用,原有
execute方法无需修改即可直接执行拼接好的多段SQL语句:
await this.myRepository.execute(`SELECT * FROM FIRST_TABLE WHERE TABLE_ID = 1; SELECT * FROM SECOND_TABLE WHERE TABLE_ID = 1;`);
注意:开启多语句执行会放大SQL注入的攻击面,生产环境使用时必须严格校验传入的SQL参数,禁止直接拼接未经过滤的用户输入到SQL语句中,优先使用参数化查询写法。
不要在调用execute时尝试传入多语句开关参数,Juggler不会将调用时传入的临时选项透传到底层驱动的连接配置,这类连接级参数必须在数据源初始化时设置才会生效。
内容的提问来源于stack exchange,提问作者Okira
相关产品推荐
相关产品推荐

