148_Java_SpringMybatis_Mybatis_原理&流程
执行流程
1 获取sqlSessionFactory对象:
解析文件的每一个信息保存在Configuration中,返回包含Configuration的DefaultSqlSession;
[MappedStatement]: 代表一个增删改查的详细信息
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
2 获取sqlSession对象
返回一个DefaultSQlSession对象,包含Executor和Configuration; 同时会创建Executor对象;
SqlSession sqlSession = build.openSession();
3 获取接口的代理对象(MapperProxy)
getMapper,使用MapperProxyFactory创建一个MapperProxy的代理对象代理对象里面包含了,DefaultSqlSession(Executor)
EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
4 执行增删改查方法
Employee em1 = mapper.getEmpById(5);
MyBatis在四大对象
• Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
• ParameterHandler (getParameterObject, setParameters)
• ResultSetHandler (handleResultSets, handleOutputParameters)
• StatementHandler (prepare, parameterize, batch, update, query)
总结:
1 根据配置文件(全局,sql映射)初始化出Configuration对象
2 创建一个DefaultSqlSession对象,他里面包含Configuration以及
Executor(根据全局配置文件中的defaultExecutorType创建出对应的Executor)
3 DefaultSqlSession.getMapper(): 拿到Mapper接口对应的MapperProxy;
4 MapperProxy里面有(DefaultSqlSession);
5 执行增删改查方法:
1) 调用DefaultSqlSession的增删改查(Executor);
2) 会创建一个StatementHandler对象(同时也会创建出ParameterHandler和ResultSetHandler)
3) 调用StatementHandler预编译参数以及设置参数值;使用ParameterHandler来给sql设置参数
4) 调用StatementHandler的增删改查方法;
5) ResultSetHandler封装结果
注意:四大对象每个创建的时候都有一个interceptorChain.pluginAll(parameterHandler);
- 点赞
- 收藏
- 关注作者
评论(0)