mybatis时序图
2021-05-18 00:03:35 0 举报
mybatis源码时序图
作者其他创作
大纲/内容
DefaultSqlSessionFactory
DefaultParameterHandler
SqlSessionFactoryBuilder
构造方法
getResourceAsStream
delegate.query
1、newStatementHandler传入参数创建StatementHandler对象来执行查询2、prepareStatement初始化 StatementHandler 对象
Action
openSession
jdbcType和javaType之间的数据转换,设置占位符,对Statement对象设置参数
对Statement返回的结果集resultSet,取出特定的列
[二级缓存有数据] [else]
Opt
return DefaultSqlSessionFactory
queryFromDatabasedoQuery
return List<E> list
return <T> T
mapper代理
1.1、configuration.span style=\"font-size: inherit;\
2.2、执行mapperProxy的invoke方法,判断mapper中的方法类型,最终调用的还是SqlSession中的selectList方法
TypeHandler
return DefaultSqlSession
执行 XML 解析build(parser.parse())
执行查询 ps.execute();resultSetHandler.handleResultSets(ps)
findAll
1、获得MappedStatement对象configuration.getMappedStatement2、执行查询 executor.query
selectList
XMLConfigBuilder
一级缓存默认开启二级缓存需手动开启1、开启全局⼆级缓存配置:<setting name=\"cacheEnabled\" value=\"true\"/>2、在需要使⽤⼆级缓存的Mapper配置⽂件中配置标签<cache></cache>3、在具体CURD标签上配置 useCache=true
parameterHandler.setParameters使用ParameterHandler对象来完成对Statement的设值
PreparedStatementHandler
getMapper
1.、ms.getBoundSql 获取sql2、createCacheKey创建缓存key3、query 查询
namespaceId
1、传统方式namespace+id User user = sqlSession.selectList(\"com.lagou.mapper.IUserMapper.findById\
DefaultResultSetHandler
CacheExecutor
XMLMapperBuilder
执行StatementHandler进行读操作 handler.query
通用流程InputStream inputStream = Resources.getResourceAsStream(\"sqlMapConfig.xml\"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = factory.openSession();
return Configuration
DefaultSqlSession
处理返回结果集List<Object>处理延迟加载JavassistProxyFactory
Mybatis时序图
解析mapper节点configurationElement解析二级缓存cache标签配置cacheElement⼀个Mapper.xml只会解析⼀次标签,也就是只创建⼀次Cache对象,放进configuration中,并将cache赋值给MapperBuilderAssistant.currentCache,并加⼊到了每个MappedStatement对象中
BaseExecutor
SimpleExecutor
ParameterMapping获得 typeHandler、jdbcType 属性
[一级缓存有数据] [else]
2、mapper代理// 使用JDK动态代理对mapper接口产生代理对象 IUserMapper mapper = sqlSession.getMapper(IUserMapper.class); //代理对象调用接口中的任意方法,执行的都是动态代理中的invoke方法 List<User> all = mapper.findAll();
收藏
0 条评论
下一页