MyBatis获取参数值的两种方式:${}、#{}
${}:本质就是字符串拼接,可能造成SQL注入,要自己手动添加单引号。
#{}:本质是占位符赋值,相当于JDBC中的?,可以自动添加单引号。
MyBatis获取参数值的各种情况
字面量:
字面量就是它本身,比如:字面量1,就是1它本身,string类型的字面量“ABC”,就是ABC本身,int i,或者string s,那么i和s就是变量,是不确定的值。
1. Mapper接口种方法的参数是单个字面量类型
可以通过${}和#{}来获取,{}中的名称可以是任意的,但是${}要自己添加单引号
Mapper接口
Mapper.xml
测试
结果
SQL语句:select * from `user` where name = 'coco'
使用了 select * from `user` where name = #{username} 的结果如下
SQL语句:select * from `user` where name = ?
2. Mapper接口种方法的参数是多个字面量类型
MyBatis会自动将这些参数放在一个map集合中,以两种方式存储
以arg0,arg1...为键,以参数为值;
以param1,param2...为键,以参数为值;
因此只需要通过${}和#{}访问map集合的键就可以获取相对应的值,${}需要手动加单引号
参数有多个的时候用 arg0、arg1、...或param1、param2、...来获取map集合中的对应值,按传参的顺序排,可以混着用
3. Mapper接口种方法的参数是Map集合类型
若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合
map集合的键的名字可以自己定,而情况2是mybatis定的
将这些数据放在map中, 只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号
4. Mapper接口种方法的参数是实体类类型
可以使用${}和#{},通过访问实体类对象中的属性名获取属性值
注意${}需要手动加单引号
属性和属性名:
将set和get方法名中的set和get去掉,将剩下的首字母变成小写就是属性名
因为有一些成员变量中没有但是有对应的set和get方法
5. 使用@Param标识参数
(使用@param注解命名参数 @Param("id")相当于 @Param(value="id"))
mybatis会将参数放在map集合中,以两种方式存储
以@Param的值为键,以参数为值
以param1,param2...为键,以参数为值
因此只需要通过${}和#{}访问map集合的键就可以获取相对应的值,${}需要手动加单引号
相比于第三种就省去了自己手动创建Map集合的过程了