XxxDao使用动态代理代替SqlSession.xxX方法

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值