MyBatis 源码分析
2025-08-03 12:40:10 0 举报
AI智能生成
MyBatis是一款支持定制化SQL、存储过程以及高级映射的持久层框架,它消除了几乎所有的JDBC代码和手动设置参数以及获取结果集。核心类包括`SqlSessionFactoryBuilder`、`SqlSessionFactory`、`SqlSession`和`Mapper`。其中`SqlSessionFactoryBuilder`用于构建`SqlSessionFactory`,`SqlSessionFactory`是线程安全且单例的,用于创建`SqlSession`。`SqlSession`代表了和数据库的一次会话,它包含了一系列操作数据库的方法,例如 CRUD。`Mapper`是接口,包含了定义好的操作数据库的方法,MyBatis通过动态代理生成其实现类,从而与数据库交互。 MyBatis源码设计巧妙,通过阅读和分析源码,可以深入理解其配置解析、SQL执行流程以及结果映射机制等工作原理。源码文件类型多样,包括 `.java` 文件、XML映射文件以及属性配置文件 `.properties` 等。在修饰语方面,源码中大量使用了设计模式,如工厂模式、建造者模式、单例模式、代理模式和模板方法模式等,以保证框架的灵活性和扩展性。同时,源码对异常处理机制也非常重视,确保程序的健壮性和稳定性。
作者其他创作
大纲/内容
数据源设计
顶级接口 DataSource
非池化数据源 UnpooledDataSource
非池化数据源工厂 UnpooledDataSourceFactory
池化数据源 PooledDataSource
池化数据源工厂 PooledDataSourceFactory
核心对象
存储型对象
Configuration
MappedStatement
操作型对象
SqlSession
Executor
StatementHandler
ParameterHandler
ResultSetHandler
TypeHandler
初始化阶段
<font color="#5b79e8">XmlConfigBuilder</font>
<font color="#ec7270">XmlMapperBuilder</font>
<font color="#95da69">XmlStatementBuilder</font>
初始化流程(从左到右,从上到下)
初始化流程图
入口程序
<b>SqlSessionFactoryBuilder</b>#build
<b><font color="#5b79e8">XMLConfigBuilder</font></b>#parse
<b><font color="#5b79e8">XMLConfigBuilder</font></b>#parseConfiguration
<font color="#5b79e8" style=""><b>XMLConfigBuilder</b></font>#settingsAsProperties
<b style="color: rgb(91, 121, 232);">XMLConfigBuilder</b>#typeAliasesElement
<b><font color="#5b79e8">XMLConfigBuilder</font></b>#pluginElement
<b><font color="#5b79e8">XMLConfigBuilder</font></b>#environmentsElement
<b><font color="#5b79e8">XMLConfigBuilder</font></b>#typeHandlerElement
...
<b><font color="#5b79e8">XMLConfigBuilder</font></b>#mapperElement
<b><font color="#ec7270">XMLMapperBuilder</font></b>#parse
<b><font color="#ec7270">XMLMapperBuilder</font></b>#configurationElement
XMLMapperBuilder#cacheRefElement
XMLMapperBuilder#cacheElement
XMLMapperBuilder#parameterMapElement
XMLMapperBuilder#resultMapElements
XMLMapperBuilder#sqlElement
<b><font color="#ec7270">XMLMapperBuilder</font></b>#buildStatementFromContext
<b><font color="#95da69">XMLStatementBuilder</font></b>#parseStatementNode
<b>MapperBuilderAssistant</b>#addMappedStatement
<b><font color="#ec7270">XMLMapperBuilder</font></b>#bindMapperForNamespace
<b>Configuration</b>#addMapper
<b><font color="#ec7270">XMLMapperBuilder</font></b>#parsePendingResultMaps
<b><font color="#ec7270">XMLMapperBuilder</font></b>#parsePendingCacheRefs
<b><font color="#ec7270">XMLMapperBuilder</font></b>#parsePendingStatements
<b>Configuration</b>#addMapper
<b>SqlSessionFactoryBuilder</b>#build
代理阶段
<b>Configuration</b>#addMappers
MapperRegistry
JDK 的动态代理 MapperProxyFactory
MapperProxy
MapperMethod
SqlCommand
MethodSignature<br>
ParamNameResolver
0 条评论
下一页