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

猜你喜欢

转载自www.cnblogs.com/feibazhf/p/12933042.html