> 是预编译参数,安全防注入,用于传递值。是字符串替换,有SQL注入风险,用于动态传入表名、列名等SQL关键字。 这是一个MyBatis中非常核心且重要的问题。简单来说, 和 的主要区别在于安全性、处理方式和使用场景。 下面我将从这几个方面详细解释它们的区别。 --- 核心总结 | 特性 | (预编译参数) | (字符串替换) | | :--- | :--- | :--- | | 工作机制 | 使用JDBC的 | 简单的字符串拼接/替换 | | 安全性 | 安全,能有效防止SQL注入 | 不安全,有SQL注入风险 | | 类型处理 | 自动进行数据类型转换 | 不进行类型处理,直接是文本替换 | | 性能 | 数据库可预编译和缓存执行计划,性能稍高 | 每次都是新的SQL,数据库需要重新解析 | | 使用场景 | 传递参数值,如 条件、 的 值等 | 动态指定SQL关键字或标识符,如表名、列名、 等 | --- 1. (预编译参数 - Parameter Placeholder) 是MyBatis中最常用、也是最推荐的方式。 工作原理 它在处理时,会将SQL中的 替换为 占位符,...