Mybatis中的源码
源码追踪:MapperProxyFactory–>MapperProxy–>cachedMapperMethod–>MapperMethod–>SqlCommand
ParamNameResolve类中
作用:处理返回值和参数
为什么要在参数前面加@Param
就是为了进行参数的处理
MapperProxy中执行的execute方法:
command.getType()是进行判断是哪个方法:
而对应相应的方法
mybatis动态代理手撕源码顺序
MapperProxyFactory–>Proxy.newProxyInstance()方法中–>MapperProxy–>invoke方法–>cachedMapperMethod()方法–>MapperMethod方法–>两个属性SqlCommand和Methodsignature–>两个属性name和SqlCommandType–>MethodSignature中的属性是返回值和参数(paramNameResolver)
execute是根据sql的类型进行执行方法(UNKNOWN, INSERT, UPDATE, DELETE, SELECT, FLUSH;枚举法)
SqlSession.insert
DefaultSqlSession
Executor
StatementHandler
SqlSession.update
SqlSession.selectOne()
SqlSession.Delete()