Mybatis源码解读-SqlSession四大神器之Statement

StatementHandler 简介
是四大神器中最重要的一个对象,负责操作 Statement 与数据库进行交流.在工作时
还会使用 ParameterHandler 进行参数配置,使用 ResultHandler 将查询结果与实体类对象进行绑定.
首先看一下 StatementHandler 接口定义

 

在 StatementHandler 接口中有四种重要的方法.分别是 prepare,parameterize,batch,update.
prepare:用于具体创建一个 Statement 对象或则 preparedStatement 对象
parameterize:用于初始化 Statement 及对 Sql 中占位符进行赋值.
update:用于通知 Statement 将[insert,update,delete]推送到数据库
query:用于通知 Statement 将[select]推送到数据库并返回对应查询结果.

 

 

StatementHandler 继承结构 

 

 

 

从上图可以看到 StatementHandler 接口下有两个直接实现类[BaseStatementHandler]和[RoutingStatementHandler]
[]RoutingStatementHandler]:是一个具体实现类.在这个类中并没有对 Statement 对象进行具体使用.只是根据得到
Executor 类型,决定创建何种类型 StatementHandler 对象.在 MyBatis 工作时,使用的 StatementHandler 接口对象实际上
就是 RoutingStatementHandler 对象.
我们可以简单理解为
StatementHandler statmentHandler = new RountingStatementHandler();
[BaseStatementHandler]:是StatementHandler接口的另一个实现类.本身是一个抽象类.用于简化StatementHandler接口
实现的难度,属于适配器设计模式体现.它有三个实现
类.SimpleStatementHandler,PreparedStatementHandler,CallableStatementHandler.
在 RountingStatementHandler 创建时,就跟根据接收的 Executor 类型来创建这个三个类型对象的.
[SimpleStatementHandler]:管理 Statement 对象向数据库中推送不需要预编译的 SQL 语句
[PreparedStatementHandler]:管理 PreparedStatementHandler 对象向数据库推送预编译的 SQL 语句.
[CallableStatementHandler]:管理 CallableStatement 对象调用数据库中构造函数.

 

三丶StatementHandler 对象创建


         StatementHandler 对象是在 SqlSession 对象接收到操作命令时,由 Configuraion 中 newStatementHandler 方法负
责调用的.

 

RoutingStatementHandler 构造方法,将会根据 Executor 的类型决定创建
SimpleStatementHandler,PreparedStatementHandler,CallableStatementHandler 实例对象. 

 

StatementHandler 接口方法介绍
( (1 ) prepare 方法:

 

prepare 方法用于创建一个(Statement or PreparedStatement or CallableStatement)对象,并设置 Statement 对象的最大
工作时间和一次性读取的最大数据量.让后将生成的 Statement 对象返回.
prepare 方法只在 BaseStatementHandler 被实现.在其三个子类中没有被重写.用于三个子类调用获得对应的
Statement 接口对象.
prepare 方法依靠 instantiateStatement(connection)方法来返回具体 Statement 接口对象.
这个方法是 BaseStatementHandler 中定义的抽象方法,由三个子类来具体实现.
SimpleHandler 中的[instantiateStatement] 方法 

 

PreparedStatementHandler 中的[instantiateStatement] 方法 

 

CallableStatementHandler 中的[instantiateStatement] 方法 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值