mybatis关于ORM的使用以及设计(二)[DaoInterface 转换 Mapper代
第一节中,分析了Mybatis的ORM框架的初始化,这篇来分析SQL执行过程中,对象->SQL是如何转换的 其中包含两种映射思想 ①DAO接口->Mapper实例 ②执行DAO的方法时,参数->SQL的转换
我们在使用mybatis的时候,Mapper会设置命名空间。 Java对象的DAO接口声明如下:
MybatistestMapper {
从包结构以及命名分析,Dao接口与Mapper有关系(XML 以及Mapper对象) 在不使用Spring的时候,mybatis通过sqlSession.getMapper(MybatistestMapper.class) 来获得DAO-Mapper代理代理类。 查看SqlSession的默认实现类DefaultSqlSession.getMapper(),通过configuration得到Mapper 查看Configuration.getMapper 继续查看mapperRegistry.getMapper。可以得到以下信息 ①创建Mapper的工厂被缓存在knownMappers 如果工厂不存在,则报错。查看代码,工厂是在XMLMapperBuilder解析Mapper时候添加进去的。 根据Mapper.xml中的namespace,缓存Factory。有个好处。对获取的DaoMapper需要在配置文件中配置过。限定了使用范围。也避免后期执行时候出错。 代码可自行查找源码 ②当缓存中不存在时,则创建动态代理MapperProxyFactory.newInstance ?mapperProxyFactory.newInstance @SuppressWarnings("unchecked" T newInstance(MapperProxy
<span style="color: #0000ff">final MapperProxy } 通过以上步骤,我们找到了Dao接口的实现(Mapper 实例接口)
通过上面的代码,可以得知实际执行SQL的是mapperProxy 代理类 看下mapperProxy 的invoke方法 Object invoke(Object proxy,Method method,Object[] args) (Object. method.invoke( MapperMethod mapperMethod =
?查看MapperMethod的execute方法 ====
到此为止,我们只是找到了要执行的SQL。由SqlSession来执行。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |