Mybatis认识
MyBatis 是一个优秀的、轻量级的 Java 持久层框架(Persistence Framework),它主要用来简化 Java 应用程序与关系型数据库(如 MySQL、Oracle 等)之间的交互。
在没有 MyBatis 之前,Java 开发者使用原生的 JDBC 来操作数据库,需要编写大量重复的“样板代码”(如建立连接、手动解析结果集、关闭连接等)。MyBatis 的出现就是为了把开发者从这些繁琐的劳动中解放出来。
💡 核心设计理念:SQL 优先
与 Hibernate 这种“全自动”的 ORM(对象关系映射)框架不同,MyBatis 属于“半自动”的 ORM 框架。
-
Hibernate: 试图让你完全忘记 SQL。你操作 Java 对象,Hibernate 自动帮你生成并执行 SQL。
-
MyBatis: 坚持 “SQL 才是数据库的核心”。它不会帮你生成 SQL,而是让你自己写原生 SQL,但它会帮你搞定参数绑定和结果集映射。
🔑 MyBatis 的四大核心优势
1. 免去繁琐的 JDBC 代码
它能够自动将 Java 的基本数据类型、Map、POJO(普通的 Java 对象)接口映射到数据库的记录中,自动管理数据库连接的生命周期。
2. 极其强大的“动态 SQL”
这是 MyBatis 最受好评的功能。利用 MyBatis 提供的 XML 标签(如
3. 解耦 SQL 与 Java 代码
MyBatis 允许将 SQL 语句独立写在 XML 配置文件中(或者通过注解写在接口上)。这样一来,业务逻辑代码(Java)和数据访问代码(SQL)分离,DBA(数据库管理员)可以直接优化 SQL,而不需要去修改 Java 源码
4. 没有“黑盒魔术”
它非常透明。你写的 SQL 是什么,它执行的就是什么。不会像 Hibernate 那样,因为配置不当而在底层偷偷执行一堆意料之外的 SELECT 语句(即经典的 N+1 查询问题),这让系统性能的调优变得非常可控
🛠️ 工作流程对比:原生 JDBC vs MyBatis
为了让你直观感受,我们来看看查询一个用户时,两者的代码对比:
-
原生 JDBC: 需要手动写 Connection, PreparedStatement, 然后用 while(resultSet.next()) 一个个字段去 user.setName(rs.getString("name"))。
-
MyBatis 架构:
在 MyBatis 中,你只需要关注两件事:
1. 定义一个 Java 接口(Mapper)
@Mapper
public interface UserMapper {
@Select("select * from user")
public List<User> findAll();
}
2. 在 XML 中编写对应的 SQL
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/web01
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=1234
当你调用 findAll() 时,MyBatis 会自动找到这条 SQL,把参数 select * from user 传进去,执行查询,并把结果自动封装成一个 User 对象返回给你。(不需要手动解析、封装)

- 在讲 MyBatis 和 Spring Boot 时,会极力强调 Controller(控制层) \(\rightarrow\) Service(业务逻辑层) \(\rightarrow\) Mapper/Dao(数据访问层)。
- MyBatis 属于 Mapper 层。
- 路线图上写的 API 设计、JWT 认证在 Controller 层。
- 你在写代码的时候,脑子里一定要有一张清晰的“数据流动图”:前端请求 \(\rightarrow\) Controller \(\rightarrow\) Service \(\rightarrow\) Mapper(MyBatis执行SQL) \(\rightarrow\) 数据库。
浙公网安备 33010602011771号