mybatis 框架小记

主要的核心类

  • SqlSession 作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能
  • Executor MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
  • StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。
  • ParameterHandler 负责对用户传递的参数转换成JDBC Statement 所需要的参数,
  • ResultSetHandler 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合;
  • TypeHandler 负责java数据类型和jdbc数据类型之间的映射和转换
  • MappedStatement MappedStatement维护了一条<select|update|delete|insert>节点的封装,
  • SqlSource 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
  • BoundSql 表示动态生成的SQL语句以及相应的参数信息
  • Configuration MyBatis所有的配置信息都维持在Configuration对象之中。

 

SqlSession对象的创建

SqlSession实际上调用的仍然是Executor, 在创建 SqlSession 对象时将执行器作为其属性,

ps: excutor是对于jdbc技术中,Statement的封装

a692a7dd01674e5fbce10f29b84d0e72.png

 

生成mapper对象过程

SqlSessionFactoryBuilder根据传入的数据流生成Configuration对象,然后根据Configuration对象创建默认的SqlSessionFactory实例。

261b53ea881049e19d72660444b9fd66.png

 

sqlsession去configuration中找

be5d36a7f3a74fa38bae23436f78c3d9.png

 

Configuration 内部中,将这个操作丢给 MapperRegistry

a92b74ba0d4f4c1abe8ee42ea14378f5.png

 

加载mybatis配置文件中的sql映射文件地址,保存至变量,便于程序中获取类信息

e42f424f93494743a099acec2f3cf886.png

 

代理对象的生成,从 knownMappers 中查找是否有该类型的类资源,如果存在,通过MapperProxy动态代理我们的Mapper,实例化该Mapper接口对应的代理对象

如果不存在,则抛出异常

43c28c07c68a4995a96fd69f0bbccc70.png

 

 

Executor的创建过程

  • CacheExecutor
  • 普通Executor

BatchExecutor、ReuseExecutor、SimpleExecutor,区别可以从他们的名字观察

10cb1f1161d64c71b2fd11b67caf5e18.png

 

执行代理方法

MapperProxy

ebd70de1ebe742dd8fed7567adb0479d.png

 

  • MapperMethod

就像是一个分发者,他根据参数和返回值类型选择不同的sqlsession方法来执行。这样mapper对象与sqlsession就真正的关联起来了。

565d43e9b3a7450fbfc5549dbda90941.png

 

f9eb48e1ffcb4a3b9ef6956ffd47d634.png

 

参数处理

345becc8dca247a6be37d49ffdfa08e2.png

 

9825bcbb9d734fc09d1c5a2ba6d51ace.png

09d942b0ebf44acbabbf3030586ad799.png

 

 

 

 

插件的拦截点

Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler (getParameterObject, setParameters)
ResultSetHandler (handleResultSets, handleOutputParameters)
StatementHandler (prepare, parameterize, batch, update, query)

Mybatis整体层次结构图 ==> 网上找的

83ce5f6c1f3942a2812bec7db1b773fe.png

 

548c7f46a421485eb1729076b8641ec2.png

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值