Mybatis中的#{}与${}
MyBatis映射配置文件中,动态传递参数两种方式:
- #{}:占位符
- ${}:拼接符
区别
- #{}为参数占位符?,即sql预编译;${}为字符串替换,即sql拼接。
- #{}:动态解析->预编译->执行;${}:动态解析->编译->执行。
- #{}的变量替换是在DBMS中;${}的变量替换是在DBMS外。
- 变量替换后,#{}对应的变量自动加上单引号’’;变量替换后,${}对应的变量不会加上单引号’’。
- #{}能防止sql注入;${}不能防止sql注入。
实例分析
假设传入参数为1,分析如下SQL
动态解析
-- #{}
select * from user where uid=