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 标签(如 , , 等),你可以根据不同的条件拼接出不同的 SQL 语句。在原生 JDBC 中,这种拼接通常伴随着无数的字符串相加和繁琐的判断,而 MyBatis 让这一切变得非常优雅。

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 对象返回给你。(不需要手动解析、封装)

image

  1. 在讲 MyBatis 和 Spring Boot 时,会极力强调 Controller(控制层) \(\rightarrow\) Service(业务逻辑层) \(\rightarrow\) Mapper/Dao(数据访问层)。
  • MyBatis 属于 Mapper 层
  • 路线图上写的 API 设计JWT 认证Controller 层。
  • 你在写代码的时候,脑子里一定要有一张清晰的“数据流动图”:前端请求 \(\rightarrow\) Controller \(\rightarrow\) Service \(\rightarrow\) Mapper(MyBatis执行SQL) \(\rightarrow\) 数据库。
posted @ 2026-05-26 09:25  ZealousMclaren  阅读(19)  评论(0)    收藏  举报