- MyBatis获取参数值的两种方式:${}和#{}
- ${}的本质就是字符串拼接,#{}的本质就是占位符赋值
- ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,要手动加单引号;但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号
**注意:**字符串拼接会出现sql注入的问题,不够安全,所以我们能用#{}获取参数的情况最好不要用${}获取参数
1、单个字面量类型的参数若mapper接口中的方法参数为单个的字面量类型,此时可以使用KaTeX parse error: Expected 'EOF', got '#' at position 4: {}和#̲{}以任意的名称(最好见名识意…{}需要手动加单引号
2、多个字面量类型的参数select * from t_user where username = '${saf}'
若mapper接口中的方法参数为多个时,此时MyBatis会自动将这些参数放在一个map集合中,以以下两种方式进行存储
- 以arg0,arg1…为键,以参数为值;
- 以param1,param2…为键,以参数为值;
因此只需要通过KaTeX parse error: Expected 'EOF', got '#' at position 4: {}和#̲{}访问map集合的键就可以获…{}需要手动加单引号。
使用arg或者param都行,要注意的是,arg是从arg0开始的,param是从param1开始的,甚至你混搭也是不会有任何问题的例如select * from t_user where username = #{param1} and password = #{arg1}
3、map集合类型的参数select * from t_user where username = '${param1}' and password = '${param2}'
mapper接口方法的参数有多个时,可手动将这些参数放在一个map集合中存储
只需要通过KaTeX parse error: Expected 'EOF', got '#' at position 4: {}和#̲{}访问map集合的键就可以获…{}需要手动加单引号。
4、实体类型的参数
若mapper接口方法的参数为实体类时
只需要通过KaTeX parse error: Expected 'EOF', got '#' at position 4: {}和#̲{}访问map集合的键就可以获…{}需要手动加单引号。
5、使用@Param注解命名参数insert into t_user values (null ,#{username},#{password},#{age},#{sex},#{email})
若mapper接口中的方法参数使用@Param注解命名参数时,此时MyBatis会自动将这些参数放在一个map集合中,以以下两种方式进行存储
- 以@Param注解的值为键,以参数为值;
- 以param1,param2…为键,以参数为值;
因此只需要通过KaTeX parse error: Expected 'EOF', got '#' at position 4: {}和#̲{}访问map集合的键就可以获…{}需要手动加单引号。
6、总结
以上五种方式可总结为以下两种情况
- 有实体类
- 无实体类
有实体类直接用第4中方法
无实体类可以统一用@Param注解实现



