MyBatis获取参数值的两种方式 : ${} 和 #{}
${}的本质是字符串 ,#{}的本质是占位符赋值
${}使用字符串拼接的方式拼接sql ,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号。
#{}使用占位符赋值的方式拼接sql ,此时为字符串类型或日期类型的字段进行赋值时 ,可以自己添加单引号。
1.若mapper接口方法的参数为单个的字面量类型,此时可以通过#{}和${}以任意的内容获取参数值,一定要注意${}的单引号问题 。
2.若mapper接口方法的参数为多个的字面量类型,此时MyBatis会将参数放在map集合中,以两种方式存储数据 :
a:以arg0,arg1...为键,以参数为值
b:以param1,param2...为键,以参数为值
因此,只需要通过#{}和${}访问map集合的键,就可以获取相对应的值,一定要注意${}的单引号问题。
3.若mapper接口方法的参数为map集合类型的参数,只需要通过#{}和${}访问map集合的键,就可以获取相对应的值,一定要注意${}的单引号问题
4.若mapper接口方法的参数为实体类类型的参数,只需要通过#{}和${}访问实体类中的属性名,就可以获取相对应的属性值.
5.可以在mapper接口方法的参数上设置@Param注解,此时MyBatis会将这些参数放在map中.
以两种方式进行存储
- 以 @Param 注解的 value 属性值为键 , 以参数为值
- 以param1,param2...为键 , 以参数为值
1.单个字面量类型的参数
若mapper接口方法的参数为单个的字面量类型,此时可以通过#{}和${}以任意的内容获取参数值,一定要注意${}的单引号问题。
例:
使用${ } ,需要用单引号括起来
2.多个字面量类型的参数
例 :
如果不写 arg 或 paramt 会报异常
异常 : 编译时映射文件异常 , 并提示可以使用的参数有 [arg1, arg0, param1, param2]
3.map集合类型的参数
接口
测试类(自定义键)
映射文件
4.实体类类型的参数
接口方法
映射文件
参数方法
5.使用@Param标识参数
接口
映射文件
可以直接使用@Param定义好的键
测试方法