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流程

Mybatis核心模块简介的更多相关文章

  1. SSH与ansible 部署方法与核心模块简介

    SSH与ansible 部署方法 部署环境 管理服务器 172.16.1.61 NFS服务器 172.16.1.31 备份服务器 172.16.1.41 1检查SSH服务是否运行并开启服务 netst ...

  2. Nodejs进阶:核心模块net入门与实例讲解

    模块概览 net模块是同样是nodejs的核心模块.在http模块概览里提到,http.Server继承了net.Server,此外,http客户端与http服务端的通信均依赖于socket(net. ...

  3. Qt5模块简介

        原文链接:Qt5 模块简介 无意中看到这篇文章,虽然讲的不是经常用的东西,但是看了这篇文章之后,可以对qt有个大致的了解,能够清晰的知道自己想要什么,应该关注那一部分,学习了,相信以后会又很大 ...

  4. MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射

    在上一章中我们学习了<MyBatis学习总结(一)——ORM概要与MyBatis快速起步>,这一章主要是介绍MyBatis核心配置文件.使用接口+XML实现完整数据访问.输入参数映射与输出 ...

  5. [转]ASP.NET 核心模块配置参考

    本文转自:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore ...

  6. 1.2(Mybatis学习笔记)Mybatis核心配置

    一.Mybatis核心对象 1.1SqlSeesionFactory SqlSessionFactory主要作用是创建时SqlSession. SqlSessionFactory可通过SqlSessi ...

  7. Qt 学习之路 2(6):Qt 模块简介

    Home / Qt 学习之路 2 / Qt 学习之路 2(6):Qt 模块简介  豆子  2012年8月26日  Qt 学习之路 2  20条评论 Qt 5 与 Qt 4 最大的一个区别之一是底层架构 ...

  8. MyBatis 核心配置综述之 ParameterHandler

    目录 ParameterHandler 简介 ParameterHandler 创建 ParameterHandler 中的参数从何而来 ParameterHandler 解析 MyBatis 四大核 ...

  9. iOS开发UI篇—核心动画简介

    转自:http://www.cnblogs.com/wendingding/p/3801036.html iOS开发UI篇—核心动画简介 一.简单介绍 Core Animation,中文翻译为核心动画 ...

随机推荐

  1. ECSHOP 2.5.1 二次开发文档【文件结构说明和数据库表分析】

    ecshop文件架构说明 /* ECShop 2.5.1 的结构图及各文件相应功能介绍 ECShop2.5.1_Beta upload 的目录 ┣ activity.php 活动列表 ┣ affich ...

  2. Docker部署Python项目

    简介 软件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正确,软件才能运行.如果从一种操作系统里面运行另一种操作系统,通常我们采取的策略就是引入虚拟机,比如在 Wind ...

  3. 基数排序(Java)

    基数排序(Java) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 基数排序(桶排序)介绍 基数排序(radix sort)属 ...

  4. nginx web服务器概念了解 配置

    服务器 服务器 服务器是一种提供高效计算的机器,与普通的PC主机相比,具有可观的稳定性,高并发性,可扩展性. 互联网任何一个应用都是以服务器为基础设施的,没有服务器我们就无法访问网络上的任何内容,只能 ...

  5. 实战技巧,Vue原来还可以这样写

    hookEvent,原来可以这样监听组件生命周期 1. 内部监听生命周期函数 <template> <div class="echarts"></di ...

  6. XHXJ's LIS,还是dp

    题目: background: #define xhxj (Xin Hang senior sister(学姐)) If you do not know xhxj, then carefully re ...

  7. 返回报文变成xml格式了!

    首先,google chrome之前有安装jsonview插件: 然后,自己弄springCloud项目,搭建eureka后,访问url发现返回报文变成xml格式了,一通摸索及查找,现整理如下: 1. ...

  8. 重学c#系列——对c#粗浅的认识(一)

    前言 什么是c#呢? 首先你是如何读c#的呢?c sharp?或者c 井? 官方读法是:see sharp. 有没有发现开发多年,然后感觉名字不对. tip:为个人重新整理,如学习还是看官网,c# 文 ...

  9. requests接口自动化3-url里带参数的get请求:params

    url里带参数的get请求:用params传参 #2.带参数的get请求,把参数写成字典格式,用params传参 para2={"type":"math"} r ...

  10. 数据可视化基础专题(六):Pandas基础(五) 索引和数据选择器(查找)

    1.序言 如何切片,切块,以及通常获取和设置pandas对象的子集 2.索引的不同选择 对象选择已经有许多用户请求的添加,以支持更明确的基于位置的索引.Pandas现在支持三种类型的多轴索引. .lo ...