最近在测试SQL 注入,对#和$2种参数引用方式做了各种测试。发现网上转的都很简单,现在整理明确下:
1、#{param} ,等同perpare statment的?方式。
如select * from user where name = #{name} == select * from user where name = ?
2、${param},等同statment中,使用字符串直接连接参数。
如String name = "admin";
select * from user where name = '${name}' (字符串前后必须用'包围)
等同 "select * from user where name = '" + name +"'";
3、#{} 支持数字,分别用#{0},#{1}...,而${}不支持。此时参数不能使用 @Param注解。
4、在接口里面,如果参数使用@Param("value")注解,则支持#{注解value},而${}不支持
5、${}不支持多参数,多个${}出现,必须使用一个javabean,而#{}无此限制