MyBatis项目中SQL语句#{}和${}的区别
-
SQL语句中#{}在引用时,如果发现目标是一个字符串,则会将其值作为一个字符串拼接到SQL语句上,即拼接时自动包裹引用
- 用来传入参数,sql在解析的时候会加上" ",当成字符串来解析 ,例如 role_id = "4";
- 使用#{}能够很大程度上防止sql注入;
-
${}引用时,即使发现目标是一个字符串,页不会作为字符串处理,拼接在SQL时,不会自动包裹引用.
- 用${}传入数据直接显示在生成的sql中,例如 role_id = 4.
- ${}方式无法防止sql注入;
- ${}一般用入传入数据库对象,比如数据库表名;
- 能用 #{} 时尽量用 #{}
- 通常情况下,使用#{}
insert into user values (default,#{name},55);
--> insert into user values (default,'fff',55);
insert into user values (default,${name},55);
--> insert into user values (default,fff,55);//sql语句错误
- 如果引用的是一个列名,使用${}
select * from user order by #{uname};
--> select * from user order by 'age'; //sql语句错误
select * from user order by ${uname};
--> select * from user order by age;
网友评论