#{} 会将要替换的内容加上类型格式, 如: userIds 为 String 类型的 "1000,1001",#{<userIds>} 会被替换为带引号的字符串 "1000,1001", 这时如果使用查询条件 IN(#{userIds}) 将变成 IN("1000,1001") 而不是 IN(1000,1001).
${} 会将要替换的内容以 value 直接替换, 不会带任何格式, 如果是 SQL 的字符串也能直接替换并被运行, 所以在某些场景, 可能被 SQL 注入的攻击者利用.
来源: http://www.bubuko.com/infodetail-3081935.html