Mybatis Mapper接口之所以能无需实现类直接执行SQL,核心在于其运行时采用**动态代理**机制。
当开发者定义Mapper接口后,Mybatis在启动时通过`Configuration`对象,利用`MapperRegistry`注册这些接口。在此过程中,`MapperAnnotationBuilder`会解析接口或XML中定义的SQL语句,生成对应的`MapperMethod`对象。
当通过`SqlSession.getMapper()`方法获取Mapper实例时,Mybatis会返回一个由`MapperProxyFactory`创建的**动态代理对象(MapperProxy)**。当调用此代理对象的任何方法时,实际是`MapperProxy`的`invoke`方法被触发。`invoke`方法会根据调用的接口方法,获取对应的`PlainMethodInvoker`,而该`Invoker`则封装了预先生成的`MapperMethod`对象。最终,`MapperMethod`负责携带SQL语句和参数,通过`SqlSession`执行数据库操作并返回结果。
这一机制极大地简化了开发,避免了编写大量冗余的SQL实现代码。