使用技巧
不论是单个参数还是多个参数,一律建议使用@param("")
能用#{}的地方尽量使用#{},减少${}
表名作为参数时,必须使用${}
order by 时,必须使用${}
使用${}时要注意何时加或不加单引号
#{}与${}使用场景
${}哪边都能使用,只是存在sql注入风险,相当于直接拼接字符串,不对参数做任何处理。
#{}会进行预编译,对参数进行处理,防止注入。
对于SELECT id,name,age FROM student WHERE name = 参数;这样的语句如果传入参数anything’ OR ‘x’='x
那么${}处理完就是SELECT id,name,age FROM student WHERE name = ‘anything’ OR ‘x’=‘x’,可以看到被注入了。
而#{}处理完就是SELECT id,name,age FROM student WHERE name = ‘anything’ OR ‘x’=‘x’,参数已经进行转义。
既然这样那为什么还要用${}呢。
因为使用#{}存在一个不足,当参数为字符串时会加上’’,这就导致某些情况下sql失效。
SELECT * FROM #{tableName},当使用#{}传入参数user,sql就会变成
SELECT * FROM ‘user’. 这样就会报错查询不到数据