总结:
1、根据配置文件(全局config.xml,sql映射 mapper.xml)解析初始化出Configuration对象
2、创建一个DefaultSqlSession对象,
他里面包含Configuration以及
Executor(根据全局配置文件中的defaultExecutorType创建出对应的Executor)
3、DefaultSqlSession.getMapper():拿到Mapper接口对应的MapperProxy(MapperProxy是代理对象,通过JDK动态代理生成);
4、MapperProxy里面有(DefaultSqlSession);
5、执行增删改查方法:
1)、调用DefaultSqlSession的增删改查(使用的是Executor的增删改查,然后Executor使用的是StatementHandler的增删改查,然后最底层其实就是基础的JDBC);
Executor如何使用StatementHandler的增删改查:
2)、会创建一个StatementHandler对象。
(同时也会创建出ParameterHandler和ResultSetHandler)
3)、调用StatementHandler预编译参数以及设置参数值;
使用ParameterHandler来给sql设置参数
4)、调用StatementHandler的增删改查方法;
5)、ResultSetHandler封装结果
注意:
四大对象(Excutor,StatementHandler,ParameterHandler,ResultSetHandler)每个创建的时候都有一个interceptorChain.pluginAll(parameterHandler);(拦截器)
转自b站评论:
mybatis运行原理:
1.通过加载mybatis全局配置文件以及mapper映射文件初始化configuration对象
和Executor对象(通过全局配置文件中的defaultExecutorType初始化);
2.创建一个defaultSqlSession对象,将configuration对象和Executor对象注入给
defaulSqlSession对象中;
3.defaulSqlSession通过getMapper()获取mapper接口的代理对象mapperProxy
(mapperProxy中包含defaultSQLSession对象)
4.执行增删改查:
1)通过defaulSqlSession中的属性Executor创建statementHandler对象;
2)创建statementHandler对象的同时也创建parameterHandler和
resultSetHandler;
3) 通过parameterHandler设置预编译参数及参数值;
4)调用statementHandler执行增删改查;
5)通过resultsetHandler封装查询结果