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. git常用命令(部分)

    git常用命令 1.git init 初始化一个新本地仓库,它在工作目录下生成一个名为.git的隐藏文件夹. 安装好git的,新建一个文件夹,在空文件夹中鼠标右击点击Git Bash Here 2.g ...

  2. Win8.1卸载64位Oracle Database 11g的详细图文步骤记录

    Oracle Database 11g在Win8 上的卸载过程记录. Step1停用oracle服务:进入计算机管理/任务管理器,在服务中,找到oracle开头的所有服务,右击选择停止: Step2 ...

  3. 苹果XR手机的音频体验测试总结

    苹果XR手机的音频   苹果XR算是苹果手机历史上一个里程碑的型号了,是苹果憋了两年的大招,连苹果9的称号就不要了.直接是X.说明苹果对它给予的希望很大.作为一个音频算法工程师,一直想体验一下XR的音 ...

  4. 洛谷 P2648 赚钱

    这道题其实就是求最长路顺便再判断一下正环而已. 这种题肯定要用SPFA的啦,有又正边权(因为最长路所以正边就相当于负边),又是正环(同理,相当于负环),SPFA专治这种问题. 当一个点入队多次的时候, ...

  5. Angular2-------Error: Unexpected value ‘undefined’ declared by the module ‘模块名

    请检查[app.module.ts]文件中的[declarations]模块最后是否多了一个逗号 (完)

  6. Yarn的安装和全局配置(源/缓存位置/全局安装位置)

    本文安装环境: Win10 64位 前置条件: 已安装好Node环境(参考Node安装与环境配置) 下载和安装 Yarn安装包下载地址 全局配置 控制台输入命令, 正常显示版本表示安装成功 $ yar ...

  7. css样式冲突怎么解决?

    一个网页有时会使用两种CSS,那发生css样式冲突要怎么解决?下面本篇文章就来给大家介绍一下发生css样式冲突的解决方法,希望对大家有所帮助. css冲突怎么解决? 解决方法有很多,如果可以对html ...

  8. 揭秘JAVA JVM内幕

    在之前的文章 一步步解析java执行内幕 中,比较详细分析了java代码是如何一步一步在jvm中执行的,然而设计的的jvm核心技术点,并未做深入分析,本篇文章将重点分析jvm,涉及到的内容包括jvm内 ...

  9. Hadoop2.7.7 centos7 完全分布式 配置与问题随记

    Hadoop2.7.7 centos7 完全分布式 配置与问题随记 这里是当初在三个ECS节点上搭建hadoop+zookeeper+hbase+solr的主要步骤,文章内容未经过润色,请参考的同学搭 ...

  10. hdu 4352 XHXJ's LIS 数位DP+最长上升子序列

    题目描述 #define xhxj (Xin Hang senior sister(学姐))If you do not know xhxj, then carefully reading the en ...