温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java mybatis啥原理

发布时间:2026-10-14 00:57:50 来源:亿速云 阅读:102 作者:小樊 栏目:编程语言

MyBatis 是 Java 中非常常用的持久层框架,它的核心作用是:把 Java 对象和 SQL 语句映射起来,简化 JDBC 操作。下面用“原理 + 流程”给你讲清楚。


一、MyBatis 解决了什么问题?

传统 JDBC 的问题:

  • 写大量重复代码(加载驱动、建连接、写 Statement、处理结果集)
  • SQL 硬编码在 Java 里
  • 结果集手动封装成对象,很麻烦

MyBatis 的做法:

  • SQL 和 Java 代码分离(XML / 注解)
  • 自动把 ResultSet 映射成 Java 对象
  • 只关注 SQL 和结果映射

二、MyBatis 的核心原理(重点)

1️⃣ 整体架构

Java 程序
   ↓
SqlSessionFactory
   ↓
SqlSession
   ↓
Executor(执行器)
   ↓
StatementHandler
   ↓
JDBC

2️⃣ 启动阶段(初始化)

① 读取配置

  • mybatis-config.xml
  • Mapper.xml
  • 注解

② 解析成 Configuration 对象

  • SQL 语句
  • 参数类型
  • 返回类型
  • 映射规则

③ 创建 SqlSessionFactory

SqlSessionFactory factory = 
    new SqlSessionFactoryBuilder().build(inputStream);

3️⃣ 运行阶段(执行 SQL)

SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectById(1);

背后发生了什么?

✅ 动态代理(重点)

UserMapper mapper = session.getMapper(UserMapper.class);
  • MyBatis 用 JDK 动态代理
  • 你写的 UserMapper 接口并没有实现类
  • MyBatis 自动生成代理对象

✅ 执行流程

  1. 根据方法名找到对应的 SQL
  2. 参数解析(ParameterHandler)
  3. JDBC 执行 SQL
  4. 结果映射(ResultSetHandler)
  5. 返回 Java 对象

三、SQL 是怎么映射的?

XML 方式

<select id="selectById" resultType="User">
  select * from user where id = #{id}
</select>

注解方式

@Select("select * from user where id = #{id}")
User selectById(int id);

四、核心组件(面试常问)

组件 作用
Configuration 全局配置
SqlSessionFactory 创建 Session
SqlSession 一次数据库会话
Executor 执行 SQL
MapperProxy 接口代理
TypeHandler Java ↔ JDBC 类型转换
ResultMap 结果映射

五、为什么说 MyBatis 是“半自动化 ORM”?

  • ✅ 自动:连接、执行、映射
  • ❌ 不自动:SQL 要自己写

对比:

  • Hibernate:全自动(不写 SQL)
  • MyBatis:灵活、可控、偏 SQL

六、一句话总结

MyBatis 本质就是:用动态代理 + JDBC 封装,把 SQL 和 Java 方法绑定,自动完成参数传递和结果映射。

如果你愿意,我也可以:

  • 画一张 执行流程图
  • 用 源码级讲(SqlSession / Executor)
  • 对比 MyBatis vs JPA

你想往哪方面深入?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手