文章目录
在mybatis接口mapper文件中引用传入的参数是通过#{param}
或者${param}
来使用的。
1.数据类型匹配
#
:<mark>会进行预编译,而且进行类型匹配</mark>
$
:<mark>不进行数据类型匹配</mark>
2.实现方式
#
:用于<mark>变量替换</mark>
$
:实质上是<mark>字符串拼接</mark>
3. # 和 $ 的使用场景
-
变量的传递
<mark>必须使用#
</mark>,使用#{}
就等于使用了PrepareStatement
这种占位符的形式,提高效率。
<mark>可以防止sql注入等等问题。</mark>
#
方式一般用于传入<mark>添加</mark>,<mark>修改</mark>的值或<mark>查询</mark>,<mark>删除</mark>的where条件 id值
select * from t_user where name = #{param}
-
$
只是只是简单的字符串拼接,
<mark>要特别小心sql注入问题</mark>,
<mark>对应非变量部分,只能用$
。</mark>
<mark>$
方式一般用于传入数据库对象,</mark>
比如这种
group by 字段 ,
order by 字段,
表名,
字段名
等
<mark>没法使用占位符的就需要使用${}
</mark>
select count(*), from t_user group by ${param}
-
能同时使用
#
和$
的时候,最好用#
。