关于#{}和${}的区别
Mybatis获取参数值的两种方式:#{}、${}
#{}本质是占位符赋值,${}本质是字符串拼接
1.若mapper接口方法的参数为单个的字面量类型,此时可以通过#{}和${}以任意的内容获取参数值。一定要注意${}的’ 单引号 '问题
2.若mapper接口方法的参数为多个的字面量类型,此时Mybatis会将参数放在map集合中,以两种方式存储数据
- 以arg0,arg1…为键,以参数为值
- 以param1,param2…为键,以参数为值
因此,值需要通过#{}和${}访问map集合的键,就可以获取相对应的值
3.若mapper接口方法的参数为map集合类型的参数,通过#{}和${}访问map集合的键,就可以获取相对应的值
4.若mapper接口方法的参数为实体类类型的参数,通过#{}和${}访问实体类中的属性名,就可以获取相对应的属性值
5.可以在mapper接口方法的参数上设置@Param注解,此时Mybatis会将这些参数放在map中,以两种方式进行存储
- 以@Param注解的value属性值为键,以参数为值
- 以param1,param2为键,以参数为值
只需要通过#{}和${}访问map集合的键,就可以获取相对应的值,一定要注意${}的单引号问题。
最新的Mybatis版本中,可以理解为 ‘${}’=#{}两者大概相等