Mapper接口与xml的绑定原理:
Mybatis的Mapper接口和xml绑定的原理主要依赖于JDK动态代理技术。mapper接口并没有实现类,所以mybatis框架会通过JDK动态代理代理模式获取接口的代理实现类,然后根据接口定义的类名+方法名与xml中的id进行绑定,从而每个方法有对应的sql语句。
Mybatis中MapperProxy代理类是mybatis实现Mapper接口和xml绑定的核心类之一。它实现了InvocationHandler接口,用于拦截Mapper接口方法的调用,并将方法名和参数传递给SqlSession对象执行相应的SQL语句。
MapperProxy代理类的实现过程
1.首先,通过JDK动态代理技术生成一个MapperProxy代理类实例。这个代理类实现了Mapper口,并重写了接口中的方法。
2.在重写的方法中,MapperProxy会拦截方法调用,并将方法名和参数传递给SqlSession对象执行相应的SQL语句。
3.SqlSession对象会根据Mapper接口的namespace值找到对应的mapper.xml文件,并根据id值找到对应的SQL语句。然后,根据返回值类型和参数类型等信息,生成相应的Java代码。这些Java代码会包含对SqlSession的操作,例如查询、更新等操作。最终,SqlSession对象会将这些Java代码编译成字节码,并加载到JVM中运行。
4.当SQL语句执行完毕后,SqlSession对象会将结果返回给MapperProxy代理类。然后,MapperProxy代理类会将结果映射为Java对象,并返回给调用者。