获取XxxMapper对象
执行增删改查 ,调用queryStudentById(1)如上图可以看到进入到一个invoke()方法中 invoke()方法在MapperProxy类里,该类实现了InvocationHandler接口
MapperProxy/invoke()➜InvocationHandler : JDK动态代理接口
用到了动态代理模式:增删改查➜代理对象(MapperProxy对象)-➜代理对象帮我们“代理执行”增删改查➜
XxxMapper代理对象实际就是MapperProxy对象
mapperMethod.execute(sqlSession, args):实际调用增删改查的方法,依靠了sqlSession中的configuration和 executor. .还有调用queryStudentById(23)传递的参数args,
先来看MapperMethod对象:
cacheMapperMethod(method);方法:从缓存中拿数据:methodCache.get(method),如果缓存没有再去库里面那,让后put到缓存中:methodCache.put(method,mapperMethod)
再看mapperMethod调用的execute()方法,传了当前的sqlSession对象和参数args=23
execute()方法先处理处理增删改查方法的参数args,赋值给param,再处理sqlSession
看如何处理args:method.convertArgsToSqLCommandParam(args)处理参数,我的queryStudentById(23),给的参数是23, 参数给了该方法
进入convertArgstoSqlCommandParam()方法
看到该方法返回的是paramNameResolver类的方法getNamedParams(),所以真正执行参数的是getNamedParams()方法