执行sql时,mybatis中使用#作为参数注入方式时,需要执行20秒左右,而使用$时只需要2秒,sql本身执行也是2秒左右,不是说#能提高查询效率吗
2条回答 默认 最新
- 木头人123。 2023-11-27 20:42关注
在MyBatis中,
#
和$
都是参数占位符,但它们的工作方式是不同的。#
会把输入参数转换为一个预编译参数,也就是 JDBC 的?
。这样做的好处是可以防止 SQL 注入攻击,因为输入参数会被数据库自动转义。但如果你的查询包含很复杂的逻辑,或者使用了很多的#
占位符,那么预编译和转义可能会花费一些时间,这可能会影响查询的性能。$
则直接把输入参数拼接到 SQL 语句中。这样做的好处是可以提高查询的性能,因为不需要预编译和转义。但缺点是可能会引发 SQL 注入攻击,如果输入参数包含恶意的 SQL 代码,那么这段代码会被直接执行。所以,通常情况下,我们推荐使用
#
来防止 SQL 注入攻击。只有在你确定输入参数是安全的,并且需要优化查询性能的时候,才考虑使用$
。在你的情况下,
#
的执行时间比$
长,可能是因为预编译和转义花费了较多的时间。如果你确定你的输入参数是安全的,那么你可以考虑使用$
来提高查询的性能。但你需要谨慎处理输入参数,避免 SQL 注入攻击。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 关于#单片机#的问题:以ATMEGA128或相近型号单片机为控制器设计直流电机调速的闭环控制系统(相关搜索:设计报告|软件设计|流程图)
- ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB
- ¥30 电脑误删了手机的照片怎么恢复?
- ¥15 (标签-python|关键词-char)
- ¥15 python+selenium,在新增时弹出了一个输入框
- ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
- ¥20 学生成绩管理系统设计
- ¥15 来一个cc穿盾脚本开发者
- ¥15 CST2023安装报错
- ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办