相同点:都属于可以获取参数属性
#仅引用,在SQL语句中替代占位符的数值(赋值)
${attribute} 属于字符串拼接SQL,而非预编译占位符,会有注入攻击问题,不建议在常规SQL中使用,常用于可解决动态生降序问题。
但在动态表查询中会使用$
$符号注入攻击
<select id="selectUsersByKeyword" resultType="user">SELECT * FROM t_userWHERE name = '${name}' <!-- 会存在注入攻击 比如传入参数是 【String name = "tom' or '1'='1";】-->
</select>
以下为查询动态表:
// 演示一个$符号使用场景,动态表查询@Select("select * from ${tableName}") // <select>public List<Map<String,Object>> findData(@Param("tableName") String tableName);
List<Map<String, Object>> list = mapper.findData("t_emp");for (Map<String, Object> map : list) {System.out.println(map);}
根据传递的表名不同,查询到不同的内容