Mybatis

Mybatis小白(自用,想到啥写啥+图片摘要)

在这里插入图片描述

在这里插入图片描述

SqlSessionFactory工厂对象创建分析

在这里插入图片描述
Mybatis的两个配置文件
mybatis-configs.xml,为初始化入口文件,里面是基础环境的支撑。
XxxMapper.xml为mybatis中的映射文件。

XmlConfigBuilder 读取解析配置文件
XmlMapperBuilder 读取解析映射文件,解析为一条条的MapperedStatement ,并封装入Map<命名空间+id,sql语句,id,结果集,映射类型等等等>

Configuration,把上述两个配置文件封装,
SqlSessionFactoryBuilder读取Configuration,去构建SqlSessionFactory

基于建造模式,创建了各种配置对象,基于配置对象,构建了工厂对象(工厂模式的体现)

时序分析

在这里插入图片描述
用户调用,基于资源resource(配置文件),调用getResourceAsStream(resource),返回给用户一个输入流。

用户再调用SqlSessionFactoryBuilder对象的build方法,传进去这个流对象
在这里插入图片描述
底层需要解析这个流对象,传给XmlConfigBuilde,并通过XmlConfigBuilder对象中的parse方法解析这个流,并返回,Configuration对象,给SqlSessionFactoryBuilder对象。并调用build方法,

系统底层创建DefaultSqlSessionFactory,传入了config,再返回DefaultSqlSessionFactory给SqlSessionFactoryBuilder再返回给用户,就拿到了sqlSessionFactory

SqlSession对象应用过程分析(与数据库进行会话的入口对象)在这里插入图片描述

一个工厂,可以对应多个会话对象(SqlSession对象),由DefaultSqlSession对象实现。调用方法执行的具体访问时,需要基于一个Executor(接口)执行器,进行操作,基于不同的sql请求,创建具体的Executor 策略模式的体现 。若默认开始了二级缓存,创建的就是CacheExecutor,没有开始二级缓存,就是SimpleExecutor,若OpenSession的时候,指定Executor类型,执行一个批处理的动作,底层就会创建BatchExecutor。
通过发送MappedStatement,到StatementHandler(处理器),若sql语句,没有预编译,就创建SimpleStatementHandler,若有预编译,则创建PrepareStatementHandler,若调用了存储过程,则创建了CallableStatementHandler.
ParameterHandler把对象持久化数据库,进行参数处理
ResultSetHandler,处理结果集
TypeHandler进行,数据库与java对象的类型转换

通过SqlSession对象的getMapper方法,创建代理对象

在这里插入图片描述
当我们调用DefaultSqlSession的getMapper(class)方法,系统底层调用Configuration的getMapper(class)方法,在调用MapperRegistry的getMapper(class,sqlSession),调用MapperProxyFactory的newInstance()创建了一个代理对象。

代理对象应用过程分析

在这里插入图片描述

用户拿到代理对象,去执行MapperProxy的invoke方法,通过MapperMethod(对CRUD的封装)的execute方法去执行具体的业务在这里插入图片描述
最终都会到SelectXxx,效率更好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值