#{} 和 ${}
- #{ key } == ? :占位符 + 赋值(⚠️ 推荐使用 !!!)
<!-- 过程 -->
1️⃣ emp_id = ? 2️⃣ ? = 赋值
- ${ key } == + :字符串拼接(通常不会采用${}的方式传值)
<!-- 过程 -->
"emp_id =" + id
结论:
-
实际开发中,能用 #{} 实现的,肯定不用 ${}。
-
**除非特殊情况: 动态的不是值,是列名或者关键字,需要使用 ${} 拼接。**因为:通过 Java 程序动态生成数据库表,表名部分需要 Java 程序通过参数传入;而 JDBC 对于表名部分是不能使用问号占位符的,此时只能使用 ${}
//注解方式传入参数!!
@Select("select * from user where ${column} = #{value}")
User findByColumn(@Param("column") String column, @Param("value") String value);
-
⚠️ 为什么 #{} 更安全?
-
参数化处理
#{} 会将参数传递给数据库驱动程序,驱动程序负责将参数安全地嵌入SQL语句中。这意味着参数值不会被当作SQL代码执行。
-
避免SQL注入
因为参数值是以参数形式传递的,数据库驱动程序不会将其解释为SQL代码,只会将其视为普通数据。
-