一、
二、
三、mybatis原理
1. 静态代理和动态代理
a. 静态代理可以为一个接口生成一个代理类,代理类去操作这个接口的具体实现类
b. 动态代理可以为多个接口生成同一个代理类,代理类去操作这个接口的具体实现类, 通过拦截器方法的回调,对目标target方法进行增强
2. mybatis使用动态代理,生成了接口的代理类 org.apache.ibatis.binding.MapperProxy
3. 代理类也做了实现类的工作,通过xml和实现类的映射关系,执行sql
4. mybatis使用方法的全限定名作为key,去xml寻找唯一的sql去执行,因此接口Mapper内的方法不能重载
四、可以使用JDK动态代理自定义一个MapperProxy,跟mybatis的源码比较
参考: