mybatis理解#{}与${}之区别
1、#{}:
#{}解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,就像JDBC中使用Statement进行数据库操作,sql语句直接与参数值拼接,容易引发sql注入攻击。
2、${}:
${仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换;就像JDBC中使用PreparedStatement进行数据库操作,可以有效防止sql注入攻击。
综上所得, ${ } 变量的替换阶段是在动态 SQL 解析阶段,而 #{ }变量的替换是在 DBMS 中。
大道,在太极之上而不为高;在六极之下而不为深;先天地而不为久;长于上古而不为老