动态代理原理解析-mapper之间如何映射

图1



图2

MapperProxy在调用invoke方法时会创建一个MapperMethod类,MapperMethod类中有2个成员变量SqlCommand和MethodSignature。SqlCommand负责封装sql命令,MethodSignature中封装方法参数和sql的返回类型。


图3
图4


在new sqlcommand方法中,会根据mapper中的接口创建mappedstatment对象,一个mappedstatment对应一个方法。

总结:MapperMethod类是整个代理机制的核心类,对SqlSession中的操作进行了封装使用。 该类里有两个内部类SqlCommand和MethodSignature。 SqlCommand用来封装CRUD操作,也就是我们在xml中配置的操作的节点。每个节点都会生成一个MappedStatement类。MethodSignature用来封装方法的参数以及返回类型,在execute的方法中我们发现在这里又回到了SqlSession中的接口调用,和我们自己实现UerDao接口的方式中直接用SqlSession对象调用DefaultSqlSession的实现类的方法是一样的,经过一大圈的代理又回到了原地,这就是整个动态代理的实现过程了。

你可能感兴趣的:(动态代理原理解析-mapper之间如何映射)