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
  • 相关阅读:
    ExtJs中ComboBox使用之技巧
    Ethernet帧结构
    Sqlite修改表
    Solr系列:Linux下部署Solr
    Ethernet帧的接收流程
    使用SQLite作为Quartz.Net的Job Store
    Quartz.Net的一个Bug
    获取程序集的Public key token
    SQLite数据类型
    shell取出多列文件中某一列重复的数据
  • 原文地址:https://www.cnblogs.com/feibazhf/p/12933042.html
Copyright © 2011-2022 走看看