Mybatis在真正操作数据库前要完成2个步骤:
1、预编译SQL语句(以提高语句利用率,减少资源消耗)
2、将SQL传输给DBMS(数据库管理系统,真正的数据库操作者)执行。
配置文件中的SQL语句使用#{value}代表参数则语句在预编译时由占位符代替(?),后由DBMS转换为带单引号的参数;而用${value}代表参数则其在预编译阶段就已被编译成SQL的一部分,且不带引号,这会引发所谓的“SQL注入”的问题。
那么想要预编译有效,就要尽量使用#{value}代表参数。
而在不需要参数成为一个引用的情况下不得不使用${value},如:
1、Like子句中的参数不额外写%,而是将%固定写在配置文件中
select * from user where username like '%${value}%'
2、字段名、表名作为参数时,其不能加引号,因为MySQL不会将带引号的字符串视为表结构的名称。