执行sql时,mybatis中使用#作为参数注入方式时,需要执行20秒左右,而使用$时只需要2秒,sql本身执行也是2秒左右,不是说#能提高查询效率吗
2条回答 默认 最新
- 木头人123。 2023-11-27 20:42关注
在MyBatis中,
#
和$
都是参数占位符,但它们的工作方式是不同的。#
会把输入参数转换为一个预编译参数,也就是 JDBC 的?
。这样做的好处是可以防止 SQL 注入攻击,因为输入参数会被数据库自动转义。但如果你的查询包含很复杂的逻辑,或者使用了很多的#
占位符,那么预编译和转义可能会花费一些时间,这可能会影响查询的性能。$
则直接把输入参数拼接到 SQL 语句中。这样做的好处是可以提高查询的性能,因为不需要预编译和转义。但缺点是可能会引发 SQL 注入攻击,如果输入参数包含恶意的 SQL 代码,那么这段代码会被直接执行。所以,通常情况下,我们推荐使用
#
来防止 SQL 注入攻击。只有在你确定输入参数是安全的,并且需要优化查询性能的时候,才考虑使用$
。在你的情况下,
#
的执行时间比$
长,可能是因为预编译和转义花费了较多的时间。如果你确定你的输入参数是安全的,那么你可以考虑使用$
来提高查询的性能。但你需要谨慎处理输入参数,避免 SQL 注入攻击。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
- ¥15 安装quartus II18.1时弹出此error,怎么解决?
- ¥15 keil官网下载psn序列号在哪
- ¥15 想用adb命令做一个通话软件,播放录音
- ¥30 Pytorch深度学习服务器跑不通问题解决?
- ¥15 部分客户订单定位有误的问题
- ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
- ¥15 Bug traq 数据包 大概什么价
- ¥15 在anaconda上pytorch和paddle paddle下载报错
- ¥25 自动填写QQ腾讯文档收集表