在编写MyBatis的映射语句时,尽量采用#{}的格式;若不得不使用${}的参数,需要要手工地做好过滤工作,来防止SQL注入攻击
- #{}:相当于PreparedStatement。#{}是编译好SQL语句再取值,它是经过预编译的,是安全的。
${}
:相当于Statement。取值以后再去编译SQL语句,它是输出变量的值。${}是未经过预编译的,是非安全的,存在SQL注入的问题。- 当需要直接插入一个不做任何修改的字符串到SQL语句中时,应该使用${}语法。
- 当使用${}参数作为字段名或表名时、需指定statementType为"STATEMENT"。