跳至主要內容
MyBatis 面试

MyBatis 面试

【简单】MyBatis 中 #{} 和 ${} 的区别是什么?

MyBatis 中 #{}${} 的区别对比

特性 #{}(预编译占位符) ${}(字符串拼接)
底层原理 使用 PreparedStatement,生成带 ? 的 SQL,预编译防止注入。 直接拼接字符串到 SQL 中,无参数化处理。
SQL 注入风险 ❌ 安全(自动转义特殊字符)。 ✔️ 高风险(需手动过滤参数)。
适用场景 动态条件值(如 WHERE id = #{value})。 动态表名、列名(如 ORDER BY ${column})。
数据类型处理 自动识别 Java 类型,匹配 JDBC 类型(如 DateTIMESTAMP)。 原样替换,可能导致语法错误(如字符串未加引号)。
性能 预编译 SQL 可复用,高效。 每次生成新 SQL,效率较低。
示例 xml SELECT * FROM user WHERE name = #{name} xml SELECT * FROM ${tableName}

钝悟...大约 7 分钟Java框架ORMJava框架ORMMyBatis
MyBatis 原理

MyBatis 原理

MyBatis 的前身就是 iBatis ,是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。本文以一个 MyBatis 完整示例为切入点,结合 MyBatis 底层源码分析,图文并茂的讲解 MyBatis 的核心工作机制。

MyBatis 完整示例

这里,我将以一个入门级的示例来演示 MyBatis 是如何工作的。

注:本文后面章节中的原理、源码部分也将基于这个示例来进行讲解。

完整示例源码地址


钝悟...大约 22 分钟Java框架ORMJava框架ORMMyBatis
MyBatis 快速入门

MyBatis 快速入门

MyBatis 的前身就是 iBatis ,是一个作用在数据持久层的对象关系映射(Object Relational Mapping,简称 ORM)框架。

img
img

钝悟...大约 9 分钟Java框架ORMJava框架ORMMyBatis
Java ORM 框架

Java ORM 框架

MyBatis 的前身就是 iBatis ,是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。本文以一个 MyBatis 完整示例为切入点,结合 MyBatis 底层源码分析,图文并茂的讲解 MyBatis 的核心工作机制。

img
img

钝悟...小于 1 分钟Java框架ORMJava框架ORM