1、
#{} :相当于JDBC SQL语句中的占位符?
${} : 相当于JDBC SQL语句中的连接符合 +
2、
#{} : 进行输入映射的时候,会对参数进行类型解析(如果是String类型,那么SQL语句会自动加上单引号‘’)
${} :进行输入映射的时候,将参数原样输出到SQL语句中
3、
#{} : 如果进行简单类型(String、Date、8种基本类型的包装类)的输入映射时,#{}中参数名称可以任意
${} : 如果进行简单类型(String、Date、8种基本类型的包装类)的输入映射时,${}中参数名称必须是value
4、
#{]:不存在sql注入问题
${} :存在SQL注入问题 ,使用OR 1=1 关键字将查询条件忽略
例子:比如根据名字查询某个用户的信息
(1)若使用${},则意味着是没有做防止sql注入的
service层:
mapper层:
结果只查询出一条用户信息:
(2)接下来修改service层传入参数(sql注入):
结果查询出了所有的用户信息,这是不安全的。
(3)若使用了#{},则Mybatis中对参数进行了转义操作,不会发生sql注入
service层:
mapper层:
结果: