小鲁蛋儿 2023-11-27 20:37 采纳率: 100%
浏览 9
已结题

mybatis $和#执行效率

执行sql时,mybatis中使用#作为参数注入方式时,需要执行20秒左右,而使用$时只需要2秒,sql本身执行也是2秒左右,不是说#能提高查询效率吗

  • 写回答

2条回答 默认 最新

  • 木头人123。 2023-11-27 20:42
    关注

    在MyBatis中,#$ 都是参数占位符,但它们的工作方式是不同的。

    # 会把输入参数转换为一个预编译参数,也就是 JDBC 的 ?。这样做的好处是可以防止 SQL 注入攻击,因为输入参数会被数据库自动转义。但如果你的查询包含很复杂的逻辑,或者使用了很多的 # 占位符,那么预编译和转义可能会花费一些时间,这可能会影响查询的性能。

    $ 则直接把输入参数拼接到 SQL 语句中。这样做的好处是可以提高查询的性能,因为不需要预编译和转义。但缺点是可能会引发 SQL 注入攻击,如果输入参数包含恶意的 SQL 代码,那么这段代码会被直接执行。

    所以,通常情况下,我们推荐使用 # 来防止 SQL 注入攻击。只有在你确定输入参数是安全的,并且需要优化查询性能的时候,才考虑使用 $

    在你的情况下,# 的执行时间比 $ 长,可能是因为预编译和转义花费了较多的时间。如果你确定你的输入参数是安全的,那么你可以考虑使用 $ 来提高查询的性能。但你需要谨慎处理输入参数,避免 SQL 注入攻击。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月6日
  • 已采纳回答 11月28日
  • 创建了问题 11月27日

悬赏问题

  • ¥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怎么办