mybatiues的#{}和${}的区别

无论是工作还是面试之中,这个点经常被问到。


结论

先直接得结论:

1、使用#{}语法,主要是mybatis会有一个预编译产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义,可以防止sql注入;

2、 使用${}语法不能防止sql注入,主要使用是在一些不能预编译的地方.

实例

实例

查看输出日志

${} 输出在这里插入图片描述
${}:可以看到 $ {}是直接被替换的,并没有一个预编译的过程;所以容易被以来注入。
#{}:也已看到,被替换的部分经过预编译阶段,我们想要查询的集合(1,2,3)却被预编译为了(“1,2,3”)
${} 输出在这里插入图片描述

#{}

Guess you like

Origin blog.csdn.net/qq_36737214/article/details/118481098