# 与 $ 的区别
1.传入的参数在SQL中显示不同
# 传入的参数在SQL中显示为字符串(当作字符串来处理),会对自动传入的数据加上双引号。
栗子:
SELECT user_id FROM teacher WHERE user_id = #{userId};
假如当我们传入的参数ID为 ”123“ 时,上述SQL的解析为:
SELECT user_id FROM teacher WHERE user_id = "123";
$ 传入的参数在SQL中直接显示为传入的值。
栗子:
SELECT user_id FROM teacher WHERE user_id = ${userId};
假如当我们传入的参数ID为 ”456“ 时,上述SQL的解析为:
SELECT user_id FROM teacher WHERE user_id = 456;
2. # 可以防止SQL注入的风险(语句的拼接);但 $ 无法防止Sql注入。
3. $ 方式一般用于传入数据库对象,例如传入表名。
4.大多数情况下还是经常使用 #,一般能用 # 的就别用 $;但有些情况下必须使用 $。
栗子:MyBatis排序时使用 order by 动态参数时需要注意,用 $ 而不是 # 。
SELECT *
FROM xxx
WHERE id = #{id}
ORDER BY ${age};