mybatis中#与$占位符有什么区别?不都是把占位符替换为目标参数了吗
在MyBatis中,#{}和${}都是用于占位符的,但是它们有一些关键的区别:
-
#{}:#{}是通过预编译的方式将传入的参数值进行占位符替换,并将最终的SQL语句发送给数据库执行。使用#{}可以防止SQL注入,因为参数值会被自动进行安全处理,如转义特殊字符。同时,#{}也可以自动进行类型转换,将传入的参数值转换为与占位符类型匹配的类型。 -
${}:${}是简单的字符串替换,将占位符替换为传入的参数值,生成最终的SQL语句。使用${}可以实现动态SQL,可以将任意表达式嵌入到SQL语句中。但是,使用${}存在安全风险,容易受到SQL注入攻击。因此,不建议在动态生成SQL语句时使用${}。
总结来说,#{}是更安全和更可靠的方式,适用于大多数情况下。而${}适用于一些特殊的情况,需要动态生成SQL语句,但在使用时需要注意防止SQL注入的风险。
原文地址: https://www.cveoy.top/t/topic/iUPx 著作权归作者所有。请勿转载和采集!