mybatis详细执行过程
下面结合源码来分析一下mybatis的详细执行过程,mybatis的源码在流行的框架中写的还是比较简单且清晰的,可以作为研究框架源码的一个敲门砖,以此来建立一下研究源码的信心。
总结:
- 根据配置文件(全局配置文件和映射文件)来初始化生成Configuration对象
- 创建一个DefaultSqlSession对象,包含有Configuration以及Executor(根据配置文件中的defaultExecutorType来创建对应的Executor)
- DefaultSqlSession.getMapper(),拿到Mapper接口对应的MapperProxy(jdk动态代理)
- MapperProxy里面有DefaultSqlSession
- 执行增删改查方法:
- 调用DefaultSqlSession的增删改查方法(里面使用的是Executor的对应方法)
- 会创建一个StatementHandler对象(使用数据库的Statement或PrepareStatement执行操作,启承上启下作用),ParameterHandler对象(对预编译的SQL语句进行参数设置,SQL语句中的的占位符“?”都对应BoundSql.parameterMappings集合中的一个元素,在该对象中记录了对应的参数名称以及该参数的相关属性)和ResultSetHandler对象(对数据库返回的结果集ResultSet进行封装,返回用户指定的实体类型)
- 调用StatementHandler的预编译参数以及ParameterHandler对象参数设置,再调用增删改查方法
- 使用ResultSetHandler封装结果