Mybatis配置和接口映射原理
Mybatis可以把Mapper.xml文件直接映射到对应的接口文件,调用接口方法会自动去Mapper.xml文件中找到对应的标签,这个功能就是利用java的动态代理在binding包中实现的。
一、注册Mapper
在初始化时会把获取到的Mapper接口注册到MapperRegistry,注册的时候创建一个Mapper代理工厂,这个工厂通过JDK的代理创建一个执行对象,创建代理需要的InvocationHandler为MapperProxy。
二、获取接口对象
final MapperProxyFactory<T> mapperProxyFactory = (MapperProxyFactory<T>) knownMappers.get(type);
通过从 knownMappers 中根据接口类型取出对应的代理工厂,,创建MapperProxyFactory对象。
三、创建MapperProxy代理对象
在MapperProxyFactory 中创建MapperProxy对象。
四、调用接口方法
调用代理方法会进入到MapperProxy的public Object invoke(Object proxy, Method method, Object[] args)方法
执行execute方法,会进入到 MapperMethod 的execute() 方法:
最终在execute() 方法中执行sql。