一位工作2年的爱好者,被问到一个Mybatis的基础问题。他跑过来逗我说,Mic先生,如果你能把这个问题回答到一定程度,请请我喝一个月的奶茶。这道题是:“Mybatis中#{}和${}有什么区别?”我们来看看普通人和专家对这个问题的回答。普通人:Mybatis中#{}和${}的区别:${}是动态替换。{}是一种占位符。师父:那我从几个方面来回答这个问题。首先,Mybatis提供的#占位符和$占位符是一种实现动态SQL的方式。通过这两个方法将参数传递给XML后,Mybatis会在执行操作前检查这两个。动态分辨率的占位符。数字占位符相当于jdbc中的那个?数字占位符。相当于在PreparedStatement中的preparedstatement中设置参数,对PreparedStatement中的sql语句进行预编译,在sql语句中使用占位符来指定sql语句的结构。并且在设置参数的时候,如果有特殊字符,会自动转义。所以#占位符可以防止SQL注入。使用$传递参数相当于直接将参数拼接在原来的SQL中,Mybatis不会对其进行特殊处理。所以$和#最大的区别就是前者是一个动态参数,而后者是一个占位符。动态参数不能防止SQL注入,所以在实际应用中,尽量使用#占位符。另外$符号的动态传参可以应用于一些动态SQL的场景,比如动态传递表名,动态设置排序字段等,以上是我对这个问题的理解。如果不注意一些小细节,可能会造成巨大的经济损失。比如现在还有一些网站存在SQL注入导致信息泄露的问题。有什么面试问题,职业发展问题,学习问题可以私信我。版权声明:除特别声明外,本博客所有文章均采用CCBY-NC-SA4.0许可协议。转载请注明来自Mic带你学建筑!如果本文对您有帮助,请给个关注和点赞。您的坚持是我不断创作的动力。欢迎关注同名微信公众号获取更多技术干货!
