在MyBatis等框架的SQL映射文件里, # 和 $ 的核心区别在于参数处理逻辑: # 会把参数当作预编译的占位符(类似 ? ),由数据库驱动完成SQL编译,能自动转义参数防止SQL注入,而且数据库可缓存预编译语句提升性能,适合处理用户输入的查询条件等参数;而 $ 是直接将参数拼接到SQL字符串中,类似字符串格式化,若参数包含恶意内容会导致SQL注入风险,且无法缓存语句,仅适用于表名、列名等非用户可控的静态标识符(且需确保参数来源安全)。简单来说, # 更安全且性能更好,开发中应优先使用,只有在确定参数绝对安全时才考虑用 $ 。