mybatis提高

1.SqlSessionFactory

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);后发生了啥?
Configuration(jdbcDriver url username password setting...以及一个mapperStatementMap,该map负责把每一条sql(由sourceId唯一确定)与mapperstatement对应起来)
MapperStatement(一条mapper.xml中的sql语句对应一个mapperStatement,主要属性有:namespace,sourceId,resultType,sql 都是mapper.xml的配置信息)

当执行完new SqlSessionFactory()后,主要执行了两个操作:
1.读取mybatis-config.xml的配置信息(...),解析后加载进configuration中
2.读取mapper.xml信息(namespace sourceId..),解析后加载成MapperStatement。然后读取configuration的map,执行map.put(sourceId,mapperStatement)
注意:sourceId = namespace + "." + id 这也是id必须唯一的原因

总结,获取sqlSessionFactory()中主要就是加载解析配置文件

2.神秘的sqlSession

怎么得到 SqlSession sqlSession = sqlSessionFactory.openSession();
哪些实现类 DefaultSqlSession (主要干事的) 
哪些方法:增删改查都有,比较重要的是 getMapper()
getMapper()做了啥?
newInstance ->  Proxy.newProxyInstance -> 在增强invoke方法中 -> mapperMethod.execute(sqlSession, args) -> execute的方法实现中 -> result = sqlSession.selectOne 又交回给了sqlSession

sqlSession四大对象
Executor:执行器,由它统一调度其他三个对象来执行对应的SQL;
StatementHandler:使用数据库的Statement执行操作;
ParameterHandler:用于SQL对参数的处理;
ResultHandler:进行最后数据集的封装返回处理;

在MyBatis中存在三种执行器:

SIMPLE:简易执行器,默认的执行器;
REUSE:执行重用预处理语句;
BATCH:执行重用语句和批量更新,针对批量专用的执行器;

3.几张比较好的图

1.mybatis整体流程图

mybatis提高_第1张图片

 

2.mybatis层次图mybatis提高_第2张图片 

你可能感兴趣的:(mybatis,mybatis)