Mybatis获取参数的两种方式:${}和#{}
-
** ${} **:
**${}**的本质就是字符串拼接,它使用字符串拼接的方式拼接sql,若字符串类型或日期类型的字段进行复制时,需要手动加单引号。
-
#{}:
**#{}**的本质就是占位符赋值,它使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号。
一般情况下,推荐使用#{}获取参数,而不是${},经过预编译而不是字符串拼接,可以有效防止SQL注入问题
1、单个字面量类型的参数
1、若mapper接口方法的参数为单个字面量类型
此时可以通过#{}或${}以任意的内容获取参数值(但是建议{}中的内容与参数保持一致)
- 一定要注意${}的内容加单引号
2、多个字面量类型的参数
2、若mapper接口方法的参数为多个的字面量类型
此时mybatis会将参数放在map集合中,以两种方式存储数据
- i.以arg0,arg1,arg2,…,argn为键,以参数为值
- ii.以param1,param2,…,paramn为键,以参数位值
因此,在#{}或${}中利用map中的键获取相应的值
3、以map集合类型的参数
3、若mapper接口方法的参数为map集合类型的参数
只需要通过#{}或${}访问map集合中的键,就可以获取相应的值
4、实体类类型的参数(重要)
4、若mapper接口方法的参数为实体类类型的参数
只需要通过#{}或${}访问实体类中的属性名,就可以获取相应的属性值
5、使用@Param注解标识参数(重要)
可以通过@Param注解标识mapper接口中的方法参数
此时,会将这些参数放在map集合中,以@Param注解的value属性值为键,以参数为值;以 param1,param2…为键,以参数为值;
只需要通过${}和#{}访问map集合的键就可以获取相对应 的值
注意${}需要手动加单引号