在Mybatis中,Mapper.xml文件中引用传入的参数是通过${param}或者#{param}来实现的。所以需要注意两者之间的区别
基本对比
#{ }:
- 会进行预编译 会进行类型匹配
- 用于变量替换
${ }:
- 不进行数据类型匹配
- 实质上是字符串拼接.
两者使用场景
- 变量传递必须使用# ,#{}相当于使用PrepareStatement这种占位符的形式,提高效率,防止sql注入,该方式一般用于传入添加、修改的值或者查询等。
- $ 就是简单的字符串拼接,有sql注入的风险。对于非变量部分,只能使用$,一般用于传入数据库对象,比如表名、字段名、等没法使用占位符的。
- 对于两者均可使用的位置,优先使用#