(1)#{}
在xxMapper.xml文件中,查询语句如下:
<select id="selectUser" resultType="mybatis.entity.User">
select * from user where username= #{username}
</select>
此时,在mybatis执行该语句前,会将该查询编译成“ select * from user where username=?”,将参数位置创建成占位符,并安全的设置参数。这样做更安全,更迅速,通常情况下用#{}这个符号。
(2)${}
如果想在SQL语句中插入一个不转义的字符串,比如下面这个语句,
<select id="getUserList" resultType="mybatis.entity.User">
select * from user order by ${column }
</select>
假如传入的参数是username,在mybatis执行该语句前,该语句会被编译成“ select * from user order by username”。${column}被直接替换掉了。这种方式同样适用于用来替换表名的情况。
用这种方式接受用户的输入,并将其用于语句中的参数是不安全的,会导致潜在的 SQL 注入攻击,因此要么不允许用户输入这些字段,要么自行转义并检验。