分析MyBatis原理用hello world分析
步骤4步:
- 获取SqlSessionFactory对象
- 获取SqlSession对象
- 获取接口的代理对象(MapperProxy)
- 执行增删改查方法
MyBatis的四大对象:
• Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
执行器
• ParameterHandler (getParameterObject, setParameters)
参数处理器
• ResultSetHandler (handleResultSets, handleOutputParameters)
结果集处理器
• StatementHandler (prepare, parameterize, batch, update, query)
Sql语句的处理器
1.获取SqlSessionFactory对象
创建流程图:
总结:就是把配置文件信息解析并保存在Configuration对象中,返回包含了Configuration的DefaultSqlSessionFactory对象
注意:MappedStatement:代表了一个增删改查的详细信息
2.获取SqlSession对象
流程图:
总结:返回一个DefaultSqlSession里面包含了Executor和Configuration
四大对象之一Executor 在这里创建
3. 获取接口的代理对象(MapperProxy)
流程图:
返回的mapper就是一个代理对象,包含了DefaultSqlSession对象
总结:openSession.getMapper(type),使用MapperProxyFactory创建一个MapperProxy的代理对象,代理对象里包含了DefaultSqlSession(包含Executor)
4.执行增删改查方法
一个查询流程图:
查询流程总结:
StatementHandler:处理sql语句预编译,设置参数等相关工作;
ParameterHandler:设置预编译参数用的
ResultHandler:处理结果集
TypeHandler:在整个过程中,进行数据库类型和javaBean类型的映射
总结:
1.根据配置文件(全局,sql映射)初始化出Configuration对象
2.创建一个DefaultSqlSession对象,里面包含了Configuration以及Executor(根据全局配置文件中的defaultExecutorType创建出对应的Executor)
3.DefaultSqlSession.getMapper();拿到Mapper接口的代理对象
4.Mapper接口的代理对象里面有(DefaultSqlSession)
5.执行增删改查方法
1)、调用DefaultSqlSession的增删改查
2)、会创建一个StatementHandler对象(同时也会创建出ParameterHandler和ResultSetHandler)
3)、调用StatementHandler预编译参数以及设置参数值,使用ParameterHandler给sql设置参数
4)、调用StatementHandler的增删改查方法
5)、使用ResultSetHandler封装结果
注意:
四大对象创建的时候都有一个interceptorChain.pluginAll(parameter),这与插件开发有关