mybatis执行sql

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis执行sql相关的知识,希望对你有一定的参考价值。

参考技术A SqlSessionFactoryBuilder 的实例化分两步。第一步 解析配置文件 得到configuration对象,第二步实例化DefaultSqlSessionFactory记录configuration。

sqlSessionFactory.openSession()这一步就厉害了,完成了事务管理对象实例化、执行器实例化、执行器代理(拦截器链)。到这一步为止完成了defaultSqlSessionFactory会话创建。

sqlSession.getMapper()是通过从configuration的mapperRegistry中获取mapper.class的MapperProxyFactory对象,再用MapperProxyFactory对象生产出一个MapperProxy的代理对象。到这里完成了对mapper类代理对象的创建,后续调用mapper类的方法时将会由mapperProxy处理。

userMapper.queryUser()真正做事的时候到了。由上文可知mapper类的方法被调用时将会由mapperProxy代替处理,所以第一站就是mapperProxy的invoke()

由下图可知,缓存的位置位于CachingExecutor中的localCache,
而Executor是在openSession时创建,由此可知一级缓存是sqlSesssion级别的。

cacheKey的组成:ms, parameter, rowBounds, boundSql

由下图可知,二级缓存与MappedStatement有关,在MappedStatement中共享一个Cache对象,而MappedStatement位于configuration,所以二级缓存可以跨sqlSession。

以上是关于mybatis执行sql的主要内容,如果未能解决你的问题,请参考以下文章

学习MyBatis

学习MyBatis

JAVAORM框架之Mybatis (Ibatis) 详解

MyBatis动态SQL

MyBatis 快速入门:动态SQL

Mybatis 动态 SQL