#{ }:预编译
-
可以避免sql注入。
-
sql注入原理:在输入的参数中插入恶意代码,sql在编译时会直接将恶意代码和语句拼接到一起。
-
避免的原因:预编译会在编译时使用?占位,固定sql语句的结构,然后用传入参数替换掉?,此时会在传入的参数值两端加引号' ',这样传入的参数就视为字符串。
-
${ }:占位符,直接将传入的参数和语句拼接在一起
-
有sql注入问题
-
解决1:将 WHERE `some_field` = '${变量}' 替换为 WHERE `some_field` = #{param}
-
解决2:将like '%${变量}%' 替换为 like concat('%', #{变量}, '%')
-
-
使用
-
order by 只能用这个,ORDER BY ${id}
-
like语句也需要用这个,select * from dm_dataset where name like '${name}%'
-