zoukankan      html  css  js  c++  java
  • Mybatis #{}与${}区别

    #{}:

      表示参数占位符,MySQL会先将#{}替换成?,PreparedStatementHandler类 (PreparedStatement) ps.execute()执行的时候,数据库预编译器就会当作一条SQL处理,会将?塞成指定的值,(无SQL注入的风险)

    ${}:

      表示变量占位符,  MySQL会将变量直接替换,ps.execute(),如果有SQL注入,数据库预编译器会把SQL分成几条执行(有SQL注入的风险)

    如果使用阿里的druid,即使设置了${},其实配置下druid,也能防止SQL注入。

    2020-05-21 10:15:29.591 DEBUG 42051 --- [nio-8080-exec-1] i.r.modules.sys.dao.SysLogDao.queryEmoj  : ==>  Preparing: select context from zhf_utf8mb4 where 1 =1 and context = ?
    2020-05-21 10:15:29.600 DEBUG 42051 --- [nio-8080-exec-1] i.r.modules.sys.dao.SysLogDao.queryEmoj : ==> Parameters: 12345(String)



    2020-05-21 10:20:18.550 DEBUG 42138 --- [nio-8080-exec-1] i.r.modules.sys.dao.SysLogDao.queryEmoj : ==> Preparing: select context from zhf_utf8mb4 where 1 =1 and context = 12345
    2020-05-21 10:20:18.556 DEBUG 42138 --- [nio-8080-exec-1] i.r.modules.sys.dao.SysLogDao.queryEmoj : ==> Parameters:
    2020-05-21 10:20:18.561 DEBUG 42138 --- [nio-8080-exec-1] i.r.modules.sys.dao.SysLogDao.queryEmoj : <== Total: 1
  • 相关阅读:
    构建CMDB的一些启发
    一个NB的安全认证机制
    SQLAlchemy
    Tornado基本使用
    Tornado源码探寻(请求到来)
    Tornado源码探寻(准备阶段)
    Tornado源码探寻(开篇)
    我的个人博客网站
    IDEA/AS快捷键收集&习惯
    ubuntu命令收集
  • 原文地址:https://www.cnblogs.com/feibazhf/p/12933042.html
Copyright © 2011-2022 走看看