短视频
2026/4/28大约 2 分钟面试题面试题
来源:短视频
mybatis里面#和$号的区别?
这是一位工作了两年的粉丝,在面试的时候被问到的一个mybatis基础问题,但很可惜他当时并没回答出来
其实在 MyBatis 中,# 和 $ 符号的差异是初学者经常被问到的问题。
在面试中被问及这个问题,也是一个很好的机会来展示对 MyBatis 基础的理解。
那对于这个问题,我会从以下几个方面来回答:
首先,MyBatis 提供了两种占位符:# 和 $ 它们都用于动态生成 SQL 语句,但在内部处理和使用方式上存在显著差异。
占位符类似于 JDBC 的预编译语句中的问号占位符(?)。它会将参数安全地设置到预编译的 SQL 语句中,从而有效防止 SQL 注入攻击。这是因为在处理过程中,特殊字符会被正确转义。
而$ 占位符是直接将参数拼接到原始 SQL 语句中。虽然它在某些情况下更灵活,但也更容易受到 SQL 注入攻击的威胁。因为 MyBatis 不会对这些参数进行特殊处理或转义。
所以,在实际应用中,推荐使用 # 占位符来确保 SQL 语句的安全性和可靠性。
而在一些需要动态拼接 SQL 的场景使用$ 占位符更加适合,比如动态表名或排序字段等。