运行原理
1.通过加载mybatis全局配置文件初始化configuration对象,并解析配置全局配置文件所有的标签同时将内容封装到configuration对象中,进而构建出SqlSessionFactory对象。
2.创建的Executor对象(执行器),将第一步的configuration对象和执行器封装到defaulSqlSession对象中。
3.defaulSqlSession通过getMapper()获取mapper接口的代理对象mapperProxy
(mapperProxy中包含defaultSQLSession对象)
4.执行增删改查:
1)通过defaulSqlSession中的属性Executor创建statementHandler对象;
2)创建statementHandler对象的同时也创建parameterHandler和
resultSetHandler;
3) 通过parameterHandler设置预编译参数及参数值;
4)调用statementHandler执行增删改查;
5)通过resultsetHandler封装查询结果
过程细节
1.创建DefaultSqlSessionFactory
构建并解析全局配置文件标签节点封装到Configuration对象中。
提示:
1. 每一个增删改查标签内容都会被封装到MappedStatement中,然后放入map容器中,key是namespace+标签id,value是对应当前名称空间下的所有MapperStatement对象。
2. 会创建每一个mapper接口对应MapperProxyFactory(mapper代理工厂对象,用来创建代理对象的)封装到map容器中,key是mapper接口全权限定类名,value是MapperProxyFactory对象。
2.创建defaultSqlSession
创建Executor对象,将Executor对象和Configuration对象封装到defaultSqlSession中
提示:
1. 创建执行器时会将事务封装到该执行器中
1. 使用每一个拦截器对Executor进行包装
3.创建mapper代理对象
通过mapper接口的全权限定类名获取MapperProxyFactory(映射代理工厂),再通过映射代理工厂创建代理对象。
3.主要执行查询过程
- 创建StatementHandler对象,使用StatementHandler创建原生的Statement对象,同时会让所有的拦截器链包装一下StatementHandler对象;
- 在构造StatementHandler对象的同时也会创建ParameterHandler、ResultSetHandler对象,同时也会让所有拦截器链包装ParamterHandler、ResultSetHandler
- 在预编译时使用TypeHandler设置参数,将java类型设置成column
- 调用原生jdbc执行查询
- 将查询结束后使用TypeHandler处理结果集,将column设置成java类型
- 返回结果
执行流程图

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律