MyBatis框架的核心原理与执行流程:
半自动化ORM框架:开发者保留SQL控制权,框架负责参数映射、结果集转换,实现SQL与Java代码的松耦合。
SqlSessionFactory(工厂类)
mybatis-config.xml
全局配置构建(数据源/事务/插件等)SqlSession(核心操作接口)
selectOne()
/insert()
等CRUD方法Executor
执行器处理Mapper接口
MapperProxy
)XML映射文件
parameterType
)和结果映射(resultMap
)配置加载阶段
javaInputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
Mapper.xml
文件Mapper接口动态代理
SqlSession.getMapper(UserMapper.class)
获取代理对象statementId
(接口全限定名+方法名)SQL解析与执行
sql<!-- UserMapper.xml -->
<select id="selectUser" resultType="User">
SELECT * FROM users WHERE id = #{id}
</select>
Executor
执行器处理事务/缓存StatementHandler
构建PreparedStatementParameterHandler
处理参数映射(#{id} → PreparedStatement参数)ResultSetHandler
将ResultSet转换为Java对象结果返回
动态SQL生成
使用OGNL表达式解析<if> <foreach>
等标签:
xml<select id="search">
SELECT * FROM products
<where>
<if test="name != null">AND name like #{name}</if>
<if test="price != null">AND price < #{price}</if>
</where>
</select>
延迟加载(Lazy Loading)
Proxy
实现关联对象的按需加载<association fetchType="lazy">
启用二级缓存机制
<cache/>
标签显式开启)应用层 ↑ Mapper接口(DAO层) ↑ MyBatis核心 ├── 配置解析层(XML/Annotation → Configuration) ├── SQL执行层(Executor/StatementHandler) └── 数据处理层(TypeHandler/ResultSetHandler) ↑ JDBC驱动
SqlSessionTemplate
MapperScannerConfigurer
SqlSession.BATCH
模式resultMap
代替resultType
<collection>
一次性加载)特性 | MyBatis | Hibernate |
---|---|---|
SQL控制权 | 显式编写SQL | 自动生成HQL |
缓存机制 | 二级缓存需显式配置 | 一级/二级缓存自动管理 |
学习曲线 | 较低(熟悉SQL即可) | 较高(需掌握HQL) |
适合场景 | 复杂SQL/需深度优化 | 快速CRUD/简单查询 |
通过这种设计,MyBatis在保持SQL灵活性的同时,显著减少了JDBC样板代码量(约减少60%)。
本文作者:宁小健
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!