第五节 Mybatis底层的JDBC封装
1、Mybatis四大对象
①Executor
②StatementHandler
③ParameterHandler
④ResultSetHandler
2、核心步骤

第五节 Mybatis底层的JDBC封装

1、Mybatis四大对象

SqlSession是一个接口,这里返回的是其实现类DefaultSqlSession的一个实例。其中有一个Executor类型的成员变量。其实进行数据库操作时SqlSession就是一个门面,真正干活的却是Executor。
05.Mybatis底层的JDBC封装 - 图1

①Executor

执行器,由它来调度StatementHandler、并由StatementHandler来调度ParameterHandler、ResultSetHandler等来执行对应的SQL。
05.Mybatis底层的JDBC封装 - 图2

②StatementHandler

使用数据库的Statemet(PreparedStatement)执行操作
05.Mybatis底层的JDBC封装 - 图3

③ParameterHandler

处理SQL参数;比如查询的where条件、和insert、update的字段值的占位符绑定。
select * from t_emp where emp_name like concat(“%”,#{empName},”%”) and sal >=#{minSalary};
insert into t_emp values(null,#{empName},#{empSalary});
update t_emp set emp_name =#{empName},emp_salary=#{empSalary} where emp_id = #{empId}
05.Mybatis底层的JDBC封装 - 图4

④ResultSetHandler

处理结果集ResultSet的封装返回。将数据库字段的值赋给实体类对象的成员变量。
05.Mybatis底层的JDBC封装 - 图5

执行过程中统领全局的代码都在Executor中,比如下图的doUpdate()是完成insert、update、delete操作的,而doQuery()是完成select操作的。

2、核心步骤

核心步骤就是四步:
第一步:获取数据库连接。
第二步:调用StatementHandler的prepare()方法,创建Statement对象并设置其超时、获取的最大行数等。
第三步:调用StatementHandler的parameterize()方法。负责将具体的参数传递给SQL语句。
第四步:调用StatementHandler的query()/update方法。完成查询/DML操作,并对结果集进行封装处理,然后返回最终结果。
05.Mybatis底层的JDBC封装 - 图6

05.Mybatis底层的JDBC封装 - 图7

05.Mybatis底层的JDBC封装 - 图8

上一节 回目录 下一节