| 项目 | #{} | ${} |
|---|---|---|
| 执行顺序 | 动态解析 -> 预编译 -> 执行 | 动态解析 -> 编译 -> 执行 |
| 变量替换 | DBMS外 | DBMS内 |
| 加单引号 | 自动加 | 不加 |
| 防止sql注入 | 可以 | 不行 |
| 假设传入参数为1 | select * from t_user where uid = #{uid} select * from t_user where uid= ? select * from t_user where uid= '1’ | select * from t_user where uid = #{uid} select * from t_user where uid= '1’ select * from t_user where uid= ‘1’ |
| 单个参数 | 可任意 | 1、使用MyBatis默认值value,即${value} 2、使用自定义参数名,前提:在映射器接口方法的参数前加注解@Param("") |
| 多个参数 | 1、使用MyBatis 默认值 arg0、arg1、arg2 … 或 param1、param2、param3 … 2、使用自定义参数名,前提:在映射器接口方法的参数前加注解@Param("") | 1、使用MyBatis 默认值 arg0、arg1、arg2 … 或 param1、param2、param3 … 2、使用自定义参数名,前提:在映射器接口方法的参数前加注解@Param("") |
注:@Param("") 是 @Param(value="") 的简写
建议:
(1)不论是单个参数还是多多个参数,一律使用@Param("")。
(2)尽量用#{}。
(3)表名做参数,必须用
。
(
4
)
o
r
d
e
r
b
y
时
,
必
须
用
{}。 (4)order by时,必须用
。(4)orderby时,必须用{}。
(5)使用
时
要
注
意
何
时
加
或
不
加
单
引
号
,
即
{}时要注意何时加或不加单引号,即
时要注意何时加或不加单引号,即{} 和 ‘${}’。



