Mybatis,动态代理CRUD源码分析

获取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()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

素心如月桠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值