Maybatis——Mapper动态代理

249 阅读1分钟

学习网址 www.cnblogs.com/hopeofthevi…

dao层两种实现方式

1.不用动态代理

直接通过dao层接口调用接口实现类方法,实现类的具体方法,需要我们自己手动调用SqlSession里面的方法,执行sql语句

2.通过mapper动态代理

1.通过Factory获取sqlsession对象

2.通过sqlsession 获取dao层的代理对象(通过动态代理根据dao层接口,session.getMapper-->Configuration.getMapper-->MapperRegistry.getmapper-->MapperProxyFactory.newInstance-->通过将MapperProxy代理对象传入newInstance方法,解析mapper.xml并创建代理接口)

1.DeaultSqlSession中的getMapper方法,

UserDao mapper = session.getMapper(UserDao.class)获取dao层代理对象,

2.Configuration类的getMapper方法,这里也是将工作继续交到MapperRegistry的getMapper的方法

3.MapperRegistry的getMapper的方法下,通过MapperProxyFactory的newInstance方法中

4.newInstance方法并将MapperProxy对象传入进去,根据该对象创建代理类并返回,在MapperProxy类中通过JDK动态代理必须实现的接口InvocationHandler

3.执行代理类的方法并返回相应结果。

动态代理中最重要的类:SqlSession、MapperProxy、MapperMethod