Configuration

主要字段

Environment:配置DataSource和TransactionFactory

ObjectFactory:bean工厂

MapperRegistry:Mapper的注册器,用Map存放class与MapperProxyFactory的映射

InterceptorChain:插件链

TypeHandlerRegistry:TypeHandler的注册器,用Map存放jdbcType、Type与TypeHandler的映射

mappedStatements:存放StatementId与MapperStatement的映射

resultMaps:存放ResultMap

parameterMaps:存放ParameterMap

loadedResource:已加载的资源,包括xml和Mapper接口

主要方法:

addMappedStatement:注册mapperStatement

addMapper:添加Mapper到MapperRegistry中,同时解析Mapper的注解和对应的xml获取MapperStatement

getMapper:获取mapper代理

mapper解析流程

SqlSessionFactoryBuilder

build:读取xml配置构建configuration,实例化SqlSessionFactory

解析xml配置主要流程:

1.解析plugin注册到configuration.addIntercptor

2.解析objectFactory注册到configuration.setObjectFactory(factory);

3.解析objectWrapperFactory注册到configuration.setObjectWrapperFactory(factory);

4.解析environments创建datasource和transactionFactory构建environment注册到configuration

5.解析typeHandlers,注册typeHandlerRegistry.register(typeHandlerClass);

6.解析mappers,根据类型解析xml或者直接addMapper

SqlSessionFactory

提供OpenSession方法,获取SqlSession

SqlSession

提供查询、更新、插入、删除接口,从configuration获取MapperStatement,然后底层委托给Executor实现

提供获取Mapper接口,底层委托给Configuration的getMapper

Executor

1.BaseExecutor:实现一级缓存,与statement交互逻辑交给子类实现

2.SimpleExecutor:每次执行sql,创建一个statement,用完关闭,默认配置

3.BatchExecutor:批量执行update语句,执行select语句时先flushStatements

4.ReuseExecutor:复用statement,如果sql相同从map中获取statement,flushStatements时关闭所有statement

5.cachingExecutor:使用装饰者模式,实现二级缓存

executor将statement与db交互的逻辑委托给StatementHandler

StatementHandler

1.SimpleStatementHandler:实现Statement与db交互功能,相当于下面的语句

Statement stm = conn.createStatement()
return stm.execute(sql);

2.PreparedStatementHandler:实现PreparedStatement与db交互功能,相当于下面的语句

PreparedStatement pstm = conn.prepareStatement(sql);
pstm.setString(1, "Hello");
return pstm.execute();

3.CallableStatementHandler:实现CallableStatement与db交互功能,相当于下面的语句

CallableStatement cs = conn.prepareCall("{call pr_add(?,?,?)}");
cs.registerOutParameter(3, Types.INTEGER);
cs.setInt(1, 10);
cs.setString(2, "Hello");
cs.execute();
return cs.getInt(3);

4.RoutingStatementHandler:根据MappedStatement的statementType将功能委托给上面三种statementHandler

ParameterHandler

setParameters:实现参数注入到preparedStatement中,相对与下面语句

preparedStatement.setString(1, "Hello");
preparedStatement.setString(2, "Hello");
preparedStatement.setString(3, "Hello"); callableStatement.setInt(1, 10);
callableStatement.setInt(2, 10);
callableStatement.setInt(3, 10);

ResultSetHandler

handlerResultSets:实现ResultSet结果转换为pojo,相当于下面的语句

User user = new User();
user.setId(resultSet.getInt("id"));
user.setName(resultSet.getString("name"));

TypeHandler

实现Statement参数设置和ResultSet类型转换

setParameter:ps.setArray(i, (Array) parameter);

getResult:rs.getArray(columnName)

整体sql流程

最新文章

  1. OpenCascade Eigenvalues and Eigenvectors of Square Matrix
  2. ElasticSearch集群配置
  3. <转载> OpenGL Projection Matrix
  4. 【Visual Lisp】变体与安全数组
  5. [AngularJS] Accessing Data in HTML -- controllerAs, using promises
  6. Java一些常见的出错异常处理
  7. 如何生成一副Poker
  8. win7 变WIFI热点 & 在线Linux 内核代码
  9. Python之路【第十一篇】:CSS --暂无内容-待更新
  10. haproxy之配置文件解析
  11. 全易通人事考勤工资验厂管理系统软件创建连接SQL2000数据库的操作方法和说明
  12. mysql列约束
  13. 关于footer 小于一屏还要在底部显示的思考
  14. 芯灵思SInA33开发板怎样烧写镜像文件
  15. celery.backends.base.NotRegistered.
  16. CDN工作过程(第二种版本)
  17. 执行Import-SPWeb报错的解决办法
  18. Java虚拟机笔记(一):类加载机制
  19. 3Sum Closest - LeetCode
  20. 执行 update操作的时候有报错 ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

热门文章

  1. Linux远程连接mongodb
  2. android自定义控件onLayout方法
  3. java 中的线程池
  4. VulnHub CengBox2靶机渗透
  5. mysql8.0 解决时区问题
  6. 锐捷交换机18010-X端口假死现象
  7. 《HelloGitHub》第 51 期
  8. 3分钟理解NMS非极大值抑制
  9. 小师妹学JVM之:逃逸分析和TLAB
  10. 模型评测之IoU,mAP,ROC,AUC