mybatis中的#{}和${}区别

Mybatis本身是基于JDBC封装的。Mybatis 的Mapper.xml语句中parameterType向SQL语句传参有两种方式:#{}和KaTeX parse error: Expected 'EOF', got '#' at position 13: {}。 我们经常使用的是#̲{},一般解说是因为这种方式可…时,就是把${para}替换成变量的值。
使用#{para}可以有效的防止SQL注入,提高系统安全性

  1. #{para}是预编译处理(PreparedStatement)范畴的;将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
    如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”.
  2. ${para}是字符串替换;将传入的数据直接显示生成在sql中。
    如:order by $user_id $,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.

在登录界面的时候用户名输入为 2 or 1=1
如果使用的是${} 就会直接替换容易出现SQL注入的情况
select * from admin where name 2 = or 1=1
而#{}则为
select * from admin where name = “2 or 1=1”
在这里插入图片描述

例如在mybatis中使用用户的用户名和密码检验的时候
在这里插入图片描述
在xml中取值的时候,使用#{}

<select id="verifyPassword" resultType="java.lang.Integer">
    SELECT count(*) FROM admin where name = #{0} and password = #{1} ;
  </select>
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页