MyBatis深度面试指南
一、MyBatis核心解析:半ORM框架的底层真相
1. 本质与工作流
- 半ORM定义:
- 对象映射:通过
ResultMap
将ResultSet自动转为Java对象(省去JDBC手动映射)。 - SQL控制:开发者需手动编写SQL,框架不自动生成(与Hibernate核心区别)。
- 对象映射:通过
- 工作流四步:
- 解析
mybatis-config.xml
→ 构建SqlSessionFactory
- 通过
SqlSessionFactory
创建SqlSession
(含数据库连接) - 动态代理生成
Mapper
接口实现类 → 执行XML/注解中SQL Executor
处理结果映射 → 返回Java对象或受影响行数。
- 解析
2. 核心组件职责
组件 | 作用 | 线程安全 |
---|---|---|
SqlSessionFactory | 全局单例,配置信息载入与Session生产 | ✅ |
SqlSession | 请求级别,执行CRUD/事务控制 | ❌(需线程隔离) |
Executor | 调度StatementHandler /ResultSetHandler | ❌ |
MappedStatement | 封装SQL/参数/结果集映射规则 | ✅ |
代码示例:动态代理调用链路
UserMapper mapper = sqlSession.getMapper(UserMapper.class); // 动态代理实例 User user = mapper.findById(1); // → 触发SqlSession.selectOne("findById",1)
二、MyBatis优势:灵活性与性能的平衡术
1. 核心优势详解
-
SQL自由度高:
- 支持动态SQL标签(
<if>
,<foreach>
),适应多条件查询:<select id="searchUsers"
- 支持动态SQL标签(