mybatis原理之mapper实现
2017-06-06 15:43
465 查看
Mybatis中一个非常重要的组件是mapper, 它担任了dao的角色,是业务逻辑层和数据库层的桥梁。那么在Mybatis中它是如何实现的呢?
在Mybatis应用中,mapper一般配置在Mybatis配置文件中,如下所示:
在生成SqlSessionFactory时,XMLConfigBuilder会解析这个配置文件,将所有生成的mapper添加到Configuration对象中,这里实际上添加的并不是实际的mapper对象,而是MapperProxyFactory,实际的mapper只会在Session调用getMapper时才会生成,因为mapper在执行时需要依赖具体的Session,所以mapper是不可能在配置解析时候生成的。
当Session调用getMapper时,会生成MapperProxy并作为生成的代理类的InvocationHandler,在源码中有如下代码:
在Mybatis应用中,mapper一般配置在Mybatis配置文件中,如下所示:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="config.properties"/> <typeHandlers> <typeHandler javaType="string" jdbcType="VARCHAR" handler="com.secoo.typehandler.MyStringHandler"/> </typeHandlers> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${db_driver}"/> <property name="url" value="${db_url}"/> <property name="username" value="${db_username}"/> <property name="password" value="${db_password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/secoo/UserMapper.xml" /> </mappers> </configuration>
在生成SqlSessionFactory时,XMLConfigBuilder会解析这个配置文件,将所有生成的mapper添加到Configuration对象中,这里实际上添加的并不是实际的mapper对象,而是MapperProxyFactory,实际的mapper只会在Session调用getMapper时才会生成,因为mapper在执行时需要依赖具体的Session,所以mapper是不可能在配置解析时候生成的。
当Session调用getMapper时,会生成MapperProxy并作为生成的代理类的InvocationHandler,在源码中有如下代码:
Proxy.newProxyInstance(mapperInterface.getClassLoader(), new Class[] { mapperInterface }, mapperProxy);
这里MapperProxy实现了InvocationHandler接口,当调用我们自己实现的mapper所定义的接口时会调用MapperProxy的invoke接口,生成MapperMethod并调用其execute方法执行数据库操作
相关文章推荐
- 为什么mybatis的mapper没有实现类(原理探究)
- MyBatis 通用 Mapper 实现原理
- Mybatis源码中Mapper的动态代理实现原理
- GitChat活动:MyBatis 通用 Mapper 实现原理及相关内容
- mybatis原理之MapperMethod实现
- MyBatis 通用 Mapper 实现原理
- MyBatis 通用 Mapper 实现原理及相关内容
- Mybatis中Mapper动态代理的实现原理
- Mybatis中Mapper动态代理的实现原理
- Mybatis3.3.x技术内幕(二):动态代理之投鞭断流(自动映射器Mapper的底层实现原理)
- mybatis mapper接口不用去实现就能处理业务原理
- Mybatis实现Mapper动态代理方式
- MyBatis原理第四篇——statementHandler对象(sqlSession内部核心实现,插件的基础)
- Mybatis运用mapper代码实现和Spring的整合(一)
- 由浅入深分析mybatis通过动态代理实现拦截器(插件)的原理
- mybatis的一级缓存实现原理
- 《深入理解mybatis原理(五)》 MyBatis缓存机制的设计与实现
- Mybatis3源码分析(20)-Mapper实现-配置加载
- 由浅入深分析mybatis通过动态代理实现拦截器(插件)的原理
- Mybatis最入门---分页查询(拦截器分页原理及实现)